精华内容
下载资源
问答
  • 汇编语言(王爽)实验十 编写程序

    万次阅读 多人点赞 2016-07-28 16:09:21
    标 题:汇编实验10—— 编写程序 作 者: XHS_12302 ...同前面的所有实验一样,这实验是必须要独立完成的,在后面的课程中,将要用到这实验中编写的3个子程序。 1.显示字符串 问题 显示字符串是现实工

    标 题: 汇编实验10—— 编写子程序
    作 者: XHS_12302
    时 间: 2016_7_28 16:56

     

     

     

     

     

    实验10编写子程序


      在这次实验中,我们将要编写3个子程序,通过它们来认识几个常见的问题和掌握解决这些问题的方法。同前面的所有实验一样,这个实验是必须要独立完成的,在后面的课程中,将要用到这个实验中编写的3个子程序。
    1.  显示字符串
    问题
    显示字符串是现实工作中经常要用到的功能,应该编写一个通用的子程序来实现这个功能。我们应该提供灵活的调用接口,使调用者可以决定显示的位置(行、列)、内容和颜色。

    提示
    (1)  子程序的入口参数是屏幕上的行号和列号,注意在子程序内部要将它们转化为显存中的地址,首先要分析一下屏幕上的行列位置和显存地址的对应关系:
    (2)  注意保存子程序中用到的相关寄存器:
    (3)  这个子程序的内部处理和显存的结构密切相关,但是向外提供了与显存结构无关的接口。通过调用这个子程序,进行字符串的显示时可以不必了解显存的结构,为编程提供了方便。在实验中,注意体会这种设计思想。

    子程序描述
    名称:show_str
    功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
    参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
        (cl)=颜色,ds:si指向字符串的首地址
    返回:无
    就用举例:在屏幕的8行3列,用绿色显示data段中的字符串。

     

     

     

     

    代码:

     

    assume cs:code
       data segment
       db 'Welcome to masm!',0
       data ends
    
     code segment
       start:  mov dh,8
               mov dl,3
               mov cl,2
               mov ax,data
               mov ds,ax
               mov si,0
               call show_str
               mov ax,4c00h
               int 21h
       show_str: push dx
                 push cx
                 push ds
                 push si
    
         mov ax,0b800h
         mov es,ax
         
         mov al,160
         mul dh
         mov bx,ax
         mov al,2
         mul dl
         add bx,ax
        mov al,cl
        
             s: mov cl,[si] 
                  jcxz ok
                  mov dx,[si]
                  mov es:[bx],dx
                  mov es:[bx+1],al
                  inc si
                  add bx,2
                  loop s
    
     ok:             
      pop si
      pop ds
      pop cx
      pop dx
    ret
    code ends
    end start 

     

     

    实验截图

     

     

     

    2.  解决除法溢出的问题
    问题
    前面讲过,div指令可以做除法。当进行8位除法的时候,用al存储结果的商,ah存储结果的余数:进行16位除法的时候,用ax存储结果的商,dx存储结果的余数。可是,现在有一个问题,如果结果的商大于ah或ax所能存储的最大值,那么将如何?
    比如,下面的程序段:
     mov bh,1
     mov ax,1000
     div bh
    进行的是8位除法,结果的商为1000,而1000在ah中放不下,
    又比如,下面的程序段:
    mov ax,1000h
    mov dx,1
    mov bx,1
    div bx
    进行的是16位除法,结果的商为11000H,而11000H在ax中存放不下。
    我们在用div指令做除法的时候,很可能发生上面的情况:结果的商过大,超出了寄存器所能存储的范围。当CPU执行div等除法指令的时候。如果发生这样的情况,将引发CPU的一个内部错误。这个错误被称为:除法溢出。我们可以通过特殊的程序来处理这个错误, 这里我们不讨论这个错误的处理,这是后面的课程中要涉及的内容。

    好了,我们已经清楚了问题的所在:用div指令做除法的时候可能产生除法溢出。由于有这样的问题,在进行除法运算的时候要注意除数和被除数的值,比如1000000/10就不能用div指令来计算。那么怎么办呢?我们用下面的子程序divdw解决。


    子程序描述
    名称:divdw
    功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
    参数:(ax)=dword型数据的低16位
        (dx)=dword型数据的高16位
        (cx)=除数
    返回:(dx)=结果的高16位,(ax)=结果的低16位
        (cx)=余数
    应用举例:计算1000000/10(F4240H/0AH)

      mov ax,4240h
      mov v dx,000fh
      mov cx,0ah
      call divdw


    提示
    给出一个公式:
    X:被除数,范围:[0,FFFF FFFF]
    N:除数,范围:[0,FFFF]
    H:X高16位,范围:[0,FFFF]
    L:X低16位,范围:[0,FFFF]
    int():描述性运算符,取商,比如:rem(38/10)=8
    rem():描述性运算符,取答数,比如:rem(38/10)=8
    公式:X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N
    这个公式将可能产生溢出的除法运算:X/N,转变为多个不会产生溢出的除法运算。
    公式中,等号右边的所有除法运算都可以用div指令来做,肯定不会导致除法溢出。

    代码:

     

    assume cs:code
        code segment
        start:mov ax,4240h
              mov dx,000fh
              mov cx,0Ah
              call divdw
              mov ax,4c00H
              int 21h
    divdw:
          push ax
          mov ax,dx
          mov dx,0
          div cx
          mov bx,ax
          pop ax
          div cx
          mov cx,dx
          mov dx,bx
          ret    
        code ends
    end start

     

     

     

    程序截图:

     

    3.数值显示
    问题
    编程,将data段中的数据以十进制的形式显示出来。
    data segment
    dw 123,12666,1,8,3,38
    data ends
      这些数据在内存中都是二进制信息,标记了数值的大小。要把它们显示到屏幕上,成为我们能够读懂的信息,需要进行信息的转化。比如,数值12666,在机器中存储为二进制信息:0011000101111010B(317AH),计算机可以理解它。而我们要在显示器上读到可以理解的数值12666,我们看到的应该是一串字符:“12666”。由于 显卡遵循的是ASCII编码,为了让我们能在显示器上看到这串字符,它在机器中应以ASCII码的形式存储为:31H、32H、36H、36H、36H(字符“0”~“9”对应的ASCII码为30H~39H)。
      通过上面的分析可以看到,在概念世界中,有一个抽象的数据12666,它表示了一个数值的大小。在现实世界中它可以有多种表示形式,可以在电子机器中以高低电平(二进制)的形式存储,也可以在纸上、黑板上、屏幕上以人类的语言“12666”来书写。现在,我们面临的问题就是,要将同一抽象的数据,从一种表示形式转化为另一种表示形式。
      可见,要将数据用十进制形式显示到屏幕上,要进行两步工作:
    (1)  将用二进制信息存储的数据转变为十进制形式的字符串:
    (2)  显示十进制形式的字符串。
    第二步我们在本次实验的第一个子程序中已经实现,在这里只要调用一下show_str即可。我们来讨论第一步,因为将二进制信息转变为十进制形式的字符串也是经常要用到的功能,我们应该为它编写一个通用的子程序。


    子程序描述
    名称:dtoc
    功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符。
    参数:(ax)=word型数据
        ds:si指向字符串的首地址
    返回:无
    应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。
    在显示时我们调用本次实验中的第一个子程序show-str。



    提示
      下面我们对这个问题进行一下简单地分析。
    (1)  要得到字符串“12666”,就是要得到一列表示该字符的ASCII码:31H、32H、36H、36H、36H。
    十进制数码字符对应的ASCII码=十进制数码值+30H
    要得到表示十进制数的字符串,先求十进制数每位的值。
    例:对于12666,先求得每位的值:1、2、6、6、6。再将这些数分别加上30H,便得到了表示12666的ASCII码串:31H、32H、36H、36H、36H。
    (2)  那么,怎样得到每位的值呢?采用如图10.2所示的方法。

    图10.2除10取余法示意


      可见,用10除12666,共除5次,记下每次的余数,就得到了每位的值。
    (3)  综合以上分析,可得出处理过程如下:
    用12666除以10,循环5次,记下每次的余数;将每次的余数分别加30H,便得到了表示十进制数的ASCII码串,如图10.3所示。



    图10.3得到十进制每位数字字符的方法示意

     


    (4)  对(3)的质疑:
    在已知数据是12666的情况下,知道进行5次循环。可在实际问题中,数据的值是多少
    程序员并不知道,也就是说,程序员不能事先确定循环次数。
      那么,如何确定数据各位的值已经全部求出了呢?我们可以看出,只要是除到商为0,各位的值就已经全部求出。可以使用jcxz指令来实现相关的功能。

     

     

     

     

     

    代码:

     

    assume cs:code
      data segment
      db 16 dup(0)
      data ends
    
     
      code segment
        start:mov ax,12666
              mov bx,data
              mov ds,bx
              mov si,0
              call dtoc
              mov dh,8
              mov dl,3
              mov cl,2
              call show_str
              mov ax,4c00h
              int 21h
    dtoc:
           mov cx,ax    ;17
           jcxz bk
           push ax
           mov al,ah
           mov ah,0
           mov bl,10
           div bl
           mov cl,al
           mov ch,ah
           pop ax
           mov ah,ch
           div bl
           mov dl,ah
           mov dh,0
           push dx
           mov ah,cl
           jmp short dtoc   ;29
         bk:pop ax 
            add ax,30h
            mov [si],al
            
            pop ax 
            add ax,30h
            mov [si+1],al
           
            pop ax 
            add ax,30h
            mov [si+2],al
            
            pop ax 
            add ax,30h
            mov [si+3],al    ;44
            
            pop ax 
            add ax,30h
            mov [si+4],al
            mov byte ptr [si+5],0
            ret
           
         
    show_str:
         mov si,0
         mov ax,0b800h
         mov es,ax
         
         mov al,160
         mul dh
         mov bx,ax
         mov al,2
         mul dl
         add bx,ax
         mov al,cl
        
             s: mov cl,[si] 
                  jcxz ok
                  mov dx,[si]
                  mov es:[bx],dx
                  mov es:[bx+1],al
                  inc si
                  add bx,2
                  loop s
    
     ok: ret    
      code ends
    end start


    程序运行截图

     

     

    至此    实验完成    

                               题中有不足之处  希望不吝赐教

                                             文中有的 文字是借鉴别人的    除了代码和截图

                                                 完成实验参考过别的资料,在第二个实验中受过小甲鱼视频(328/2)的启发

                                                                                                   视频资料上云盘找:链接: http://pan.baidu.com/s/1nvpQiLz 密码: et5r

                                                                                                                                                                                                                                     日期:2016_7_28

    展开全文
  • 利用switch语句编写一个程序

    千次阅读 2018-05-16 22:21:11
    利用switch语句编写一个程序,用户从键盘输入一个数字。如果数字为1~5,则打印信息:You wntered 5 or below!;如果数字为6~9,则打印信息:You entered 6 or higher!;如果输入其他,则打印信息:Between 1~9,please!...

    利用switch语句编写一个程序,用户从键盘输入一个数字。如果数字为1~5,则打印信息:You wntered 5 or below!;如果数字为6~9,则打印信息:You entered 6 or higher!;如果输入其他,则打印信息:Between 1~9,please!

    #include<stdio.h>
    void main()
    {
        int a;
        printf("请输入:");
        scanf("%d",&a);
    switch(a){
        case 1:
            printf("You entered 5 or below\n");
            break;
        case 2:
            printf("You entered 5 or below\n");
            break;
        case 3:
            printf("You entered 5 or below\n");
            break;
        case 4:
            printf("You entered 5 or below\n");
            break;
        case 5:
            printf("You entered 5 or below\n");
            break;
        case 6:
            printf("You entered 6 or higher\n");
            break;
        case 7:
            printf("You entered 6 or higher\n");
            break;
        case 8:
            printf("You entered 6 or higher\n");
            break;
        case 9:
            printf("You entered 6 or higher\n");
            break;
        default:printf("Between 1~9,please!\n");
        }
    }

    展开全文
  • 题目:编写一个程序,实现一个图形用户界面。在该界面上有一个静态文本框,里面有一段文字。另外还有两个单选按钮,用于设置文字的颜色:蓝色或红色。当用户选定某个颜色后,文本框中文字的颜色随机发生了变化。 ...

    题目:编写一个程序,实现一个图形用户界面。在该界面上有一个静态文本框,里面有一段文字。另外还有两个单选按钮,用于设置文字的颜色:蓝色或红色。当用户选定某个颜色后,文本框中文字的颜色随机发生了变化。

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class MouseEventDemo extends JPanel implements ActionListener{
        
        JLabel label;
        
        public static void main(String[] args){
            MouseEventDemo demo = new MouseEventDemo();
            demo.go();
        }
        
        public void go(){
            JFrame f = new JFrame("图形用户界面");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setLayout(new FlowLayout());
            JButton button1 = new JButton("红色");
            JButton button2 = new JButton("蓝色");
            label = new JLabel("信息科学与技术学院");
            f.getContentPane().add(label);
            f.getContentPane().add(button1);
            f.getContentPane().add(button2);
            f.setSize(500,100);
            f.setVisible(true);
            button1.addActionListener(this);
            button2.addActionListener(this);
        }
        
        @Override
        public void actionPerformed(ActionEvent e) {
            String str = e.getActionCommand();
            if("红色".equals(str)) {
                label.setForeground(Color.RED);
            }else {
                label.setForeground(Color.BLUE);
            }
        }
    }

    运行效果:

    展开全文
  • Code Blocks编写一个C程序

    千次阅读 2018-10-09 21:59:47
    Code Blocks编写一个C程序Code Blocks编写一个C程序1. 下载Code Blocks2. 解压缩文件3. 执行Code Blocks程序4. 新建C程序5. 编写C程序6. 编译源程序7. 执行程序 Code Blocks编写一个C程序 Code Blocks兼容性好,可...

    Code Blocks编写一个C程序

    Code Blocks兼容性好,可移植性强,编写C程序调试方便。

    1. 下载Code Blocks

    链接:https://pan.baidu.com/s/1-0LhLF-odUfPYTIOewYSOQ 密码:wnyv

    2. 解压缩文件

    在这里插入图片描述

    3. 执行Code Blocks程序

    在这里插入图片描述

    首次执行需要选择,编译器,推荐GNU GCC Compiler
    在这里插入图片描述

    启动界面
    在这里插入图片描述

    4. 新建C程序

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    5. 编写C程序

    在这里插入图片描述

    6. 编译源程序

    在这里插入图片描述

    7. 执行程序

    在这里插入图片描述

    展开全文
  • c程序设计:编写一个程序,输入一个大写字母,输出其小写字母 #include <stdio.h> int main() { char c1,c2; //c1为大写字母,ASCII:65;c2为小写字母,ASCII:97 printf("please enter a capital letter:"); ...
  • 编写一个程序输出螺旋方阵

    千次阅读 2016-07-02 20:41:52
    /* ...*All rights reserved. *文件名称:main.cpp *作者:张旺华 *完成日期: 2016 年 7 月 2 日 ...*问题描述:编写一个程序输出螺旋方阵 * */ #include #define MaxLen 10 void fun(int a[MaxLen][MaxLen],int n)
  • 一个Java编写一个计算器程序,实现double数据类型的加减乘除
  • 编写一个简单的C++程序

    千次阅读 2018-11-10 02:45:34
    编写一个简单的C++程序
  • 今天不知道是怎么回事,完全提不起来兴趣。其实这段时间都是这样,每天只能写一段小程序,白天忙是一方面,其实和前些...#include//7.13 编写一个程序,将两个字符串连接起来,不要用strcat函数。 int main() { cha
  • 编写一个程序判断一个数是否为素数 输入 整数N 其中N>=1 输出 1或0(其中1表示此数为素数,0为表示为不是素数) import java . util . Scanner ; public class Main { public static void ...
  • 编写一个程序,输出以下图案

    万次阅读 2016-10-23 20:36:21
    编写一个程序,输出以下图案   *   ***  *****  *******  *********  *********** *************  ***********  *********  *******  *****   ***  * #include int
  • 编写一个程序,用户输入某个大写字母,产生一个金字塔图案。例如用户输入字母E,则产生如下图案: 更多资料请点击:我的目录 #include<stdio.h> int main() { char u_letter; //定义一个字符型变量 ...
  • c语言 编写一个程序,输入a b c三个值,输出其中最大者
  • 编写一个程序,它能导致JVM跑出一个OutOfMenmoryError,然后捕获和处理这个错误
  • 平方根,又叫二次方根,表示为〔√ ̄〕,如:数学语言为:√ ̄16=4...编写一个程序,通过用户输入一个数字,并计算这个数字的平方根 import math i = int(input("请输入一个数值:")) a = math.sqrt(i) print(a) ...
  • 18、编写一个程序,分别使用字节流和字符流拷贝一个文本文件。 提示: 1)使用FileInputStream、FileOutputStream和FileReader、FileWriter分别进行拷贝 2)使用字节流拷贝时,定义一个1024长度的字节数组作为缓冲...
  • 编写一个程序:找出大于200的最小的质数 请用while do...while等循环
  • 继续编写的计算器程序: #include&amp;lt;iostream&amp;gt; #include&amp;lt;string&amp;gt; #include&amp;lt;vector&amp;gt; #include&amp;lt;algorithm&amp;gt; #include&...
  • 用C#编写一个简单记事本程序(上)

    万次阅读 多人点赞 2017-11-14 16:52:49
    如果想编写一个功能齐全的记事本应用可以在其基础上扩展功能模块,只要对C#进一步学习,扩展并非难事。 代码的大部分注释十分详尽,我尽可能少说废话。让你感受到自己理解程序过程中的喜悦。下面我们开始! 博文...
  • 编写一个程序,实现删除列表重复元素的功能。 a = list() print(list(set(a)))
  • 编写一个程序求解字谜游戏

    千次阅读 2016-03-08 18:30:16
    //由上顺时针旋转圈 int dx[8] = { 0,1,1,1,0,-1,-1,-1 }; int dy[8] = { 1,1,0,-1,-1,-1,0,1 }; int dic_num, n; int main() { int i; scanf("%d%d", &dic_num, &n); for (i = 0; i ; i++) { scanf("%s",...
  • 如何使用Java语言编写一个日历程序

    千次阅读 2019-04-15 20:43:19
    我们需要编写一个日历程序,这个程序将显示当前月份的日历,当前的日用一个*进行标志。想信大家都见过日历,因此,这个程序需要解决如何计算某月的天数以及一个给定日期相应的是星期几。 解决步骤: 下面看一下这...
  • 编写一个程序,输出九九乘法表

    万次阅读 2019-06-25 20:37:34
    i=1 while i<=9: j=1 while j<=i: print("%d*%d=%-2d"%(i,j,i*j),end='') j+=1 i+=1 print("\n")
  • 编写一个简单的web应用程序

    万次阅读 2017-09-28 23:32:17
    web应用程序一个可以通过web访问的应用程序。 PS:目前软件开发领域的三大方向:桌面应用程序(QQ,office)、web...手工编写一个简单的web程序:  首先电脑上需要安装tomcat,网址如下:http://tomcat.apache.org/
  • 编写一个程序,计算字符串中子串出现的次数。 print(input("请输入字符串:").count(input("请输入子串")))
  • 大二软件工程学生,初学Java,... * 编写一个程序求100以内的全部素数 * @author Rigel * */ public class Num { public static void main(String[] args) { int i = 2; int k; int j = 2; for(i = 2...
  • 用Qt Creator编写一个简单的窗口程序

    万次阅读 多人点赞 2016-09-12 01:50:08
    用Qt Creator编写一个简单的窗口程序
  • 练习 7-6 编写一个程序,比较两个文件并打印它们第一个不相同的行
  • import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/1 22:18 .../*编写一个程序,统计输入字符串中每一个小写英文字母出现的次数*/ public class page0901 { pu...
  • 比如我随便输入一个字符(大写字母或小写字母或数字或特殊符号),然后输出整数,这个要怎么做

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,215,114
精华内容 886,045
关键字:

编写一个程序