内容发布更新时间 : 2024/12/22 17:07:25星期一 下面是文章的全部内容请认真阅读。
again: add ax, [bx]
adc dx,0 inc bx
inc bx loop again ret
ENDP jiafa
4.16、编写一个程序,统计寄存器AX中二进制数位“0”的个数,结果以二位十进制数形式显示到屏幕上。
4.17、子程序的参数传递有哪些方法?
4.18、编写一个求32位数据补码的子程序,通过寄存器传递入口参数。
4.19、所谓“校验和”是指不记进位的累加,常用于检查信息的正确性。编写一个计算字节校验和的子程序。主程序提供入口参数:数据个数和数据缓冲区的首地址。子程序回送求和结果这个出口参数。
4.20、编制一个子程序,把一个16位二进制数用4位16进制形式在屏幕上显示出来。
4.21、在以BUF为首地址的字缓冲区中有3个无符号数,编程将这3个数按升序排列,结果存回原缓冲区。
4.22、在DAT字节单元中有一个有符号数,判断其正负,若为正数,则在屏幕上显示“+”号;若为负数,则显示“-”号;若是0,则显示0。
4.23、编程求1~400中所有奇数的和,结果以十六进制数形式显示到屏幕上。 4.24、在以DAT为首地址的字节缓冲区中存有100H个无符号字节数据,编程求其最大值与最小值之和,结果存入RESULT字单元。
4.25、在内存单元CNT中有一个字数据,编程将其二进制数显示到屏幕上。 4.26、在以STRG为首地址的缓冲区中有一组字符串,长度为100,编程实现将其中所有的英文小写字母转换成大写字母,其它的不变。
4.27、在以DAT为首地址的内存中有100个无符号数(数的长度为字),编程统计其中奇数的个数,结果以十进制形式显示到屏幕上。要求分别用子程序完成奇数个数统计,用宏完成十进制数显示。
4.28、编写一段程序,使汇编程序根据SIGN的值分别产生不同的指令。
如果SIGN=0,则用字节变量DATB中的无符号数除以字节变量SCALE;如果SIGN=1,则用字节变量DATB中的有符号数除以字节变量SCALE,结果都存放在字节变量RESULT中。
习题四 参考答案
4.1答:汇编语言是计算机能够提供给用户使用的最快速有效的语言,它是以处
理器指令系统为基础的低级程序设计语言,采用助记符表示指令操作码,采用标识符表示指令操作数。利用汇编语言编写程序的主要优点是可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序。在对程序的空间和时间要求高的应用领域,汇编语言的作用是不容置疑和无可替代的。然而,汇编语言作为一种低级语言也存在很多不足,例如,功能有限、编程难度大、依赖处理器指令,这也限制了它的应用范围。
汇编语言源程序由若干语句组成,通常,这些语句可以分为3类,分别是: (1)指令语句;(2) 宏指令语句;(3) 伪指令语句。汇编语言也由段组成,8086/8088按照逻辑段组织程序,具有代码段、数据段、附加段和堆栈段,段与段之间的顺序可以任意排列。需要独立运行的程序必须包含一个代码段,一个程序只有一个起始点,且必须指示程序的起始点。 4.2答:七种存储模型:
①Tiny 所有数据和代码都放在一个段内,其数据和代码都是近访问。Tiny程序可以写成.COM文件格式 ,COM程序必须从0100H的存储单元开始。这种模型一般用于小程序。
②Small 所有数据放在一个64KB的数据段内,所有代码放在另一个64KB的代码段内,数据和代码也都是近访问的。这是一般应用程序最常用的一种模型。
③Medium 代码使用多个段,一般一个模块一个段,而数据则合并成一个64KB的段组。这样,数据是近访问的,而代码则可远访问。
④Compact 所有代码都放在一个64KB的代码段内,数据则可放在多个段内,形成代码是近访问的,而数据则可为远访问的格式。
⑤Large 代码和数据都可用多个段,所以数据和代码都可以远访问。 ⑥Huge 与Large模型相同,其差别是允许数据段的大小超过64KB。 ⑦Flat 允许用户用32位偏移量,但DOS下不允许使用这种模型,只能在OS/2下或其他保护模式的操作系统下使用。MASM 5版本不支持这种模型,但MASM 6可以支持。
4.3答:需要使用一个标号,如start。对于有数据段的程序,简化段定义下应该这样开始:
start:mov ax,@data mov ds,ax
汇编语言程序设计过程中,有多种返回DOS的方法,但一般用DOS功能调用的4CH子功能来实现。应用程序的终止代码是: mov ax,4c00h int 21h
汇编结束是指汇编程序结束将源程序翻译成目标模块代码的过程。源程序的最后必须有一条end伪指令:end [标号];其中,可选的标号是程序指定的开始执行
点,连接程序以此设置CS和IP。如: end start
4.4答:逻辑段具有4个属性:(1)定位类型(align_type)说明段的起始地址应有怎样的边界值;(2)组合类型(combine_type)说明程序连接时的段合并方法;(3)使用类型(use_type)只适用于386及其后继机型,它用来指定寻址方式。(4)类别(‘class’)在引号中给出连接时组成段组的类型名。 完整代码段定义时的默认属性是:PARA、PRIVATE、USEl6
4.5答:COM和EXE程序结构。EXE程序有独立的代码段、数据段和堆栈段,还可以有多个代码段和多个数据段,程序长度可以超过64KB。COM程序只有一个逻辑段,其中包含数据区、代码区和堆栈区,程序代码长度不超过64KB,程序从100H处开始执行。
4.6 答:(1)mov al,23h AND 45h OR 67h;67H (2)mov ax,1234h/16+10h;133H (3)mov ax,254h SHL 4;2540H
(4)mov al,’a’ AND (NOT(‘b’- ‘B’));21H (5)mov ax,(76543 LT 32768)XOR 7654h;89ABH
4.7.答:(1)
42H 43H 44H 0AH 10H 45H 46H FFH - 04H 04H 04H FFH (2)
4.8答:(1)myl_b db ‘Personal Computer!’- 04H 04H 04H 34H 12H FBH FFH - - - - - - - - - - - -