精品文档
jz next ;jnz next mov ax,-1 ;mov ax,0 jmp again next: mov ax,0 ;mov ax,0ffffh again: ...
(4)有两个64位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2,编写程序段完成buffer1-buffer2功能。
(5)假设从B800h:0开始存放有100个16位无符号数,编程求他们的和,并把32位的和保存在DX.AX中。
(6)已知字符串string 包含有32KB内容,将其中的'$'符号替换成空格。
答1:;不使用串操作指令,更好 mov si,offset string mov cx,8000h
again: cmp byte ptr [si], ‘$’ ;‘$’ =24h jnz next
mov byte ptr [si], ‘ ’ ;‘ ’=20h next: inc si loop again ;dec cx ;jnz again 答2:;使用串操作指令 mov di,offset string mov al,’$’ mov cx,8000h cld
again: scasb jnz next
mov byte ptr es : [di-1], ‘ ’ next: loop again
(7)有一个100字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出)存于原处。
答1: mov si,offset array
mov cx,100
again: dec byte ptr [si]
inc si
loop again
答2:mov si,offset array
mov di,si mov ax,ds mov es,ax mov cx,100 cld
again: lodsb
。
11欢迎下载
精品文档
dec al stosb
loop again
(8)统计以'$'结尾的字符串srting 的字符个数。
2.27对以下要求,分别给出3种方法,每种方法只用一条指令。 (1)使CF=0 (2)使AX=0
(3)使AX=0和CF=0
2.28参照本习题的示意图,分析调用序列,画出每次调用及返回时的堆栈状态
其中CALL前是该指令所在的逻辑地址;另外,段内直接调用指令的机器代码的字节数为3,段间直接调用指令则为5字节。
2.29已知AX,BX存放的是4位压缩BCD表示的十进制数,请说明如下子程序的功能和出口参数。 Add al,bl Daa
Xchg al,ah Adc al,bh Daa
Xchg al,ah Ret
答:压缩BCD码加法: AX←AX+BX
出口参数:
。
12欢迎下载
精品文档
AX=BCD码和
2.30 ADD指令是用于除法指令之前,进行压缩BCD码调整的。实际上,处理器的调整过程是:AL<-AH×10+AL,AH<-0。如果指令系统没有ADD指令,请用一个子程序完成这个调整工作。
2.31 解释如下有关中断的概念: (1)内部中断和外部中断 (2)单步中断和断点中断 (3)除法错中断和溢出中断 (4)中断向量号和中断向量表
2.32 试比较INT n和段间 CALL指令,IRET和段间RET指令的功能。 2.33 什么是系统功能调用?汇编语言中,它的一般格式是怎样的?
2.34 补充例2.40,当有溢出时显示\,无溢出显示\。
补充例2.42,显示\的个数,注意首先将个数转换为ASCII码。 okmsg db ‘OK’, ‘$’
errmsg db ‘Error ! Overflow !’, ‘$’ …
mov ax,X sub ax,Y jo overflow
mov dx,offset okmsg jmp next
overflow: mov dx,errmsg next: mov ah,9 int 21h
2.36 先提示输入数字\然后在下一行显示输入的数字,
结束;如果不是键入了0到9数字,就提示错误\,继续等待输入数字。
2.37 从键盘输入一个字符串(不超过255)个,将其中的小写字母转换成大写
字母,然后按原来的顺序在屏幕上显示。
2.38 指令对状态标志的作用可以分成多中情况,例如无影响、无定义、按结果
影响、特别说明的影响等,你能区别这些情况么?分别用具体的指令来说明。
2.39 8086指令系统分成哪6个功能组?各组主要包含什么指令?举例说明。 2.40总结8086指令系统所采用的各种寻址方式,包括一般的数据寻址、外设数
据寻址、堆栈数据寻址、串操作数据寻址、转移指令目的地址的寻址等,并举例说明。
。
13欢迎下载
精品文档
习题3
3.1 伪指令语句与硬件指令语句的本质区别是什么?伪指令有什么主要作用? 3.2 什么是标识符?汇编程序中标识符怎样组成?
3.3 什么是保留字?汇编语言的保留字有哪些类型?并举例说明。 3.4 汇编语句有哪两种?每个语句由哪四部分组成?
3.5 汇编语言程序的开发有哪4个步骤?分别利用什么程序完成、产生什么输
出文件?
答:⒈ 编辑 文本编辑程序 汇编语言源程序.asm
⒉ 汇编 汇编程序 目标模块文件.obj
⒊ 连接 连接程序 可执行文件.exe或.com ⒋ 调试 调试程序 应用程序
3.6 将第2章习题2.36采用简化段定义格式编写成一个完整的源程序。 3.7 将第2章习题2.37采用完整段定义格式编写成一个完整的源程序。 3.8 区分下列概念:
(1)变量和标号(2)数值表达式和地址表达式(3)符号常量和字符串常量 3.9 假设myword是一个字变量,mybyte1和mybyte2是2字节变量,指出下列
语句中的错误原因 答:(1) mov byte ptr [bx],1000 ;1000超出了一个字节范围
(2) mov bx,offset myword[si]
;寄存器的值只有程序执行时才能确定,
;而offset是汇编过程计算偏移地址,故无法确定 ;可以改为lea bx,myword[si] (3) cmp mybyte1,mybyte2
;两个都是存储单元,指令不允许 (4) mov al,mybyte1+mybyte2
;变量值只有执行时才确定,汇编过程不能计算 (5) sub al,myword
;字节量AL与字量myword,类型不匹配 (6) jnz myword
;Jcc指令只有相对寻址方式,不支持间接寻址方式
3.10 OPR1是一个常量,问下列语句中两个AND操作有什么区别?
AND AL,OPR1 AND 0feh
3.11 给出下列语句中,指令立即数(数值表达式)的值: (1)mov al,23h AND 45h or 67h (2)Mov ax,1234h/16+10h
(3)Mov ax,NOT(65535 XOR 1234h) (4)Mov al,LOW 1234h OR HIGH 5678h (5)Mov ax,23h SHL 4 (6)Mov ax,1234h SHR 6
(7)Mov al,'a' AND(NOT('a'-'A'))
。
14欢迎下载
精品文档
(8)Mov al,'H' OR 00100000b
(9)Mov ax,(76543 LT 32768) XOR 7654h
3.12 为第2章立体2.54定义变量count、block、dplus和dminus。
3.13为第2章例题2.55定义相应的变量,并形成一个完整的汇编语言程序。 3.14画图说明下列语句分配的存储空间及初始化的数据值:
(1)byte _ var DB 'ABC',10,10h,'EF',3 DUP(-1,?,3 DUP(4)) (2)Word _var DW 10h,-5,'EF',3 DUP(?) 答:(1)byte_var DB 'ABC',10,10h,'EF',3 DUP(-1,?,3 DUP(4))
(2)word_var DW 10h,-5,'EF',3 DUP(?)
3.15请设置一个数据mydataseg,按照如下定义变量: (1)my1b为字符串变量:Personal Conputer (2)my2b为用十进制数表示的字节变量:20 (3)My3b为用十六进制数表示的字节变量:20 (4)My4b为用二进制数表示的字节变量:20 (5)My5w为20个未赋值的字节变量 (6)My6c为100的常量
(7)My7c表示字符串:Personal Computer 答:mydataseg segment
my1b db ‘Personal Computer’ my2b db 20
my3b db 14h ;20h my4b db 00010100b my5w dw 20 dup(?)
my6c equ 100 ;my6c = 100 my7c equ
3.16分析例题3.2的数据段,并上机观察数据的储存形式。
3.17修改例题3.3,现在用字定义伪指令dw,字符串传送指令movsw和字符串显示9号功能调用实现
3.18变量和标号有什么属性?
3.19 设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内
。
15欢迎下载