(5)AX 的内容加1,要求不影响CF。(INC AX )
(6)BX 的内容加1,要求影响所有标志位。(ADD BX, 1) (7)若操作结果为零转向标号GOON。(JZ GOON) 3.8 8086/8088 用什么途径来更新CS 和IP 的值?
【答】执行CALL、JMP、INT 指令,可以改变CS 和IP 中的值,即改变程序走向。 3.9 字节扩展指令和字扩展指令用在什么场合?举例说明。
【答】需要对带符号数字节扩展为字时,要预先执行CBW 指令。需要对带符号数字扩展为双 字时,要预先执行CWD。
【答】例:求-503/267=?,将商存1000H 单元. MOV AX,-503 MOV BX,267 CWD IDIV
MOV [1000H],AX HLT
3.10 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作: MOV WORD PTR [BP], 2000 MOV WORD PTR [BX], 2000 8
3.11 以下是格雷码的编码表
0——0000 ,1——0001 ,2——0011, 3——0010, 4——0110 5——0111 ,6——0101, 7——0100, 8——1100, 9——1101 请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII 的转换。
TABLE SEGMENT
TAB_DA DB 30H,31H,33H,32H,37H,36H,34H,35H,0,0 DB 0,0,38H,39H GRA DB 05H ASCII_DA DB ? TABLE ENDS CODE SEGMENT
ASSUME CS:CODE,DS:TABLE START: MOV AX,TABLE MOV DS,AX
MOV BX,OFFSET TAB_DA MOV AL,GRA XLAT
MOV ASCII_DA,AL CODE ENDS END START
3.12 8086 状态标志寄存器中,作为控制用的标志位有( 3 )个,其中,不可用指令操作的 是(DF、IF、TF)
3.13 设当前的SP=1000H,执行PUSHF 指令后,SP=(0FFE H),若改为执行INT 20H 指令后, 则SP=( 0FFA H)。
【答】执行PUSHF 指令后,SP=(0FFE H)。执行INT 20H 指令后,则SP=( 0FFA H)。 3.14 设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行PUSH BX 指令后,栈顶地址和栈顶2 个字节的内容分别是什么?
【答】当前栈顶指针(SP)=2FF00H,物理地址=20100H+FE00H=2FF00H
当执行PUSH BX 指令后,栈顶指针(SP)=FE00-2=FDFEH,栈顶物理地址=2FDFEH,栈顶2 个字节的内容分别57H,34H。
3.15 HLT 指令用在什么场合?如CPU 在执行HLT 指令时遇到硬件中断并返回后,以下应执 行哪条指令?
【答】HLT 用在使CPU 处于暂停状态而等待硬件中断的场合。
在执行HLT 指令遇到硬件中断并返回后将执行HLT 后面的一条指令。
3.16 为什么用増量指令或减量指令设计程序时,在这类指令后面不用进位标志作为判断依 9 据?
【答】増量指令或减量指令不影响进位标志CF。
3.17 用普通运算指令执行BCD 码运算时,为什么要进行十进制调整?具体讲,在进行BCD 码 的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?
【答】在BCD 码中,采用4 位二进制数对一个十进制数的编码,只允许0-9 这10 个数字出 现,但CPU 运算结果一般会超过此范围,因此要进行十进制调整。进行加、减法或乘法运算 时,调整指令必须紧跟在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。 3.18 中断指令执行时,堆栈的内容有什么变化?中断处理子程序的人口地址是怎样得到的? 【答】中断指令执行时,堆栈内容变化如下:标志寄存器被推入堆栈,且SP 减2,然后CPU 将主程序的下一条指令地址即断点地址推入堆栈,即段值CS 推入堆栈且SP 减2,偏移量推入 堆栈,且SP 减2。中断处理子程序的入口地址即中断向量,对应的中断类型号的4 倍即为中 断向量地址,在该地址处的4 个字节内容,高地址单元两个字节为中断入口地址的段地址, 低地址单元两个字节为中断入口地址的偏移地址。
3.19 中断返回指令IRET 和普通子程序返回指令RET 在执行时,具体操作内容什么不同? 【答】IRET 从堆栈中依次弹出断点处指令指针IP、代码段CS 内容与标志寄存器的值,而RET 从堆栈中依次弹出断点处指令指针IP 值、代码段CS 内容,不需要弹出标志寄存器的值。 3.20 将存放在0A00H 单元和0A02H 单元的两个无符号数相乘,结果存放在地址为0A04H 开始 的单元中。
【答】参考程序: MOV AL,[0A00H] MOV BL,[0A02H] MUL BL
MOV [0A04],AX
3.21 编程序将AX 中数,最高位保持不变,其余全部左移4 位。 【答】参考程序: MOV BX, AX AND BX , 8000H MOV CL, 4 SHL AX, CL AND AX,7FFFH OR AX, BX
3.22 将0400H 单元中的数,低4 位置零,高4 位保持不变。
【答】参考程序: MOV AL, [0400H] AND AL, 0F0H MOV [0400H], AL 10
3.23 将BX 中的数,对高位字节求反,低位字节保持不变。 【答】参考程序:NOT BH
3.24 检测Bx 中第13 位(D13),为0 时,把AL 置0,为1 时,把AL 置1。 【答】参考程序:
TEST BX,0010 0000 0000 0000B JZ ZERO MOV AL,01H HLT
ZERO: MOV AL,0 HLT
3.25 利用字串操作指令,将1000H~10FFH 单元全部清零。 【答】参考程序: CLD
MOV DI,1000H MOV CX,100H MOV AL,0 REP STOSB
3.26 从1000H 开始,存放有200 个字节,要查出字符#(ASCII 码为23H), 把存放第一个#的单 元地址送入BX 中。 【答】参考程序: CLD
MOV DI,1000H MOV CX,200 MOV DX,CX MOV AL,23H REPNZ SCASB JZ FIND
JMP NOFOUND FOUND: DEC DI MOV BX,DI NOFOUND: HLT
3.27 编程计算((X+Y)*10)+Z)/X,X、Y、Z 都是16 位无符号数,结果存在RESULT 开始的单 元。
【答】参考程序: MOV AX,X ADD AX,Y MOV BX,0AH MUL BX ADD AX,Z
ADC DX,0H MOV BX,X 11 DIV BX
MOV RESULT,AX MOV RESULT+2,DX HLT
3.28 用简单指令编程求-3/2=?,将商存DL,余数存DH 单元。用TD 调试后,写出DL,DH 的内 容。
【答】参考程序: MOV AL,-3 CBW
MOV BL,2 IDIV BL MOV DL,AL MOV DH,AH HLT
习题四汇编语言程序设计
主要内容:汇编语言程序设计。主要介绍汇编语言程序的设计方法与编程原理,重点掌握算 术运算程序、字符串处理程序、码制转换程序、子程序设计程序、常用DOS 和BIOS 功能调用 程序、汇编语言常用伪指令。
4.1 分析执行下列指令序列后的结果: 1) MOV AX,1234H MOV BX,00FFH AND AX,BX
【答】(AX)=0034H
2) MOV AL,01010101B
AND AL,00011111B ;(AL)=00010101B OR AL,11000000B ;(AL)=11010101B XOR AL,00001111B ;(AL)=11011010B NOT AL
【答】(AL)=00100101B 3) MOV DL,05H MOV AX,0A00H MOV DS,AX MOV SI,0H MOV CX,0FH AGAIN: INC SI CMP [SI],DL LOOPNE AGAIN HLT
本程序实现了什么功能?
【答】在以0A001H 开始的15 个单元中查找05H。 12
4) MOV AX,DSEGADDR MOV DS, AX MOV ES,AX
MOV SI, OFFSET B1ADDR MOV DI,OFFSET B2ADDR MOV CX,N CLD
REP MOVSB HLT
本程序实现了什么功能?
【答】将B1ADDR 中N 个字节数据传送到B2ADDR 开始的15 个存储单元。 5)MOV AX, 0H MOV DS,AX MOV ES, AX MOV AL,05H MOV DI,0A000H MOV CX,0FH CLD
AGAIN: SCASB LOOPNE AGAIN HLT
本程序实现了什么功能?
【答】从地址0A000H 开始的15 个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数 据05H 的查找。 4.2 阅读程序: 1). CLD
LEA DI,[0100H] MOV CX, 0080H XOR AX, AX REP STOSW
本程序实现了什么功能?
【答】将DS 中起始地址为0100H 的128 个字节单元清零。 2).MOV AL, 08H
SAL AL,01H ;(AL)=00010000H MOV BL, AL MOV CL ,02H
SAL AL,CL ;(AL)=01000000H ADD AL,BL ;(AL)=01010000H 本程序实现了什么功能?
【答】将AL 中的内容乘以10。
4.3 试分析下列程序完成什么功能? MOV DX,3F08H 13
MOV AH,0A2H