汇编习题参考答案

发布时间 : 星期六 文章汇编习题参考答案更新完毕开始阅读

MOV DX,A+2 TEST DX,8000H JZ ZS NOT AX NOT DX ADD AX,1 ADC DX,0

ZS:MOV B,AX

MOV B+2,DX

3.18 用移位指令为主实现对AX中的无符号数乘以5,不考虑乘积可能超出16位。

MOV DX,AX

MOV CL,2 SHL AX,CL ADD AX,DX

3.19 用移位指令为主实现对AX中的无符号数乘以5,考虑乘积可能超出16位的情况。

提示:用DX接AX左移的位,32位操作。

3.20 把AX中的内容依次倒排序,即第0位移到第15位,第1位移到第14位,…。

3.21 在数据段有如下定义:

BUFF DB ‘ABCD$EFGHIJK$’

STR1 DB 12 DUP(?) LEN DB ?

用串指令编写程序完成以下操作: (1) 对字符串STR1全部置空格符。 MOV AX,DATA MOV DS,AX MOV AL,20H LEA DI,STR1

MOV CX,STR1-BUFF CLD

REP STOSB

(2) 从左到右把BUFF中的字符串传送到STR1。 MOV AX,DATA MOV DS,AX MOV ES,AX CLD

LEA SI,BUFF LEA DI,STR1

MOV CX,STR1-BUFF REP MOVSB

(3) 从右到左把BUFF中的字符串传送到STR1。 MOV AX,DATA MOV DS,AX MOV ES,AX STD

LEA SI,STR1-1 LEA DI,LEN-1

MOV CX,STR1-BUFF REP MOVSB

(4) 比较BUFF与STR1两个字符串是否相等,如相等则DX=1,否则DX=0。 MOV AX,DATA MOV DS,AX MOV ES,AX CLD

LEA SI,BUFF LEA DI,STR1

MOV CX,STR1-BUFF REPE CMPSB

(5) 查找BUFF中有无字符$,把字符$出现的次数计入BX寄存器。 MOV AX,DATA MOV ES,AX MOV BX,0 CLD

MOV AL,‘$’ LEA SI,BUFF

MOV CX,STR1-BUFF NEXT: REPNE SCASB JCXZ NO-FOUND INC BX JMP NEXT

3.22 对于给定的AX和BX的值,执行下列程序段,程序将转向哪里?

ADD AX, BX

JNO L1

JNC L2

SUB AX,BX JNC L3 JNO L4 JMP L5

(1) AX=1234H, BX=6789H (2) AX=9200H, BX=4000H (3) AX=420EH, BX=8031H

(4) AX=E002H, BX=8086H L1,L1,L1,L5

3.23 下面不完整的程序段是比较AX和BX的值,把其中大的数送MAX变量。如果是无符号数,应如何填写指令?如果是有符号数,应如何填写指令?

CMP AX,BX

( JB L1 ) 有符号数:JL L1 MOV MAX,AX

( JMP L2 ) L1:MOV MAX,BX L2:HLT

3.24 在下列程序段的括号中分别填入如下指令,程序执行完后,AX、CX的内容是什么?

(1) LOOP (2) LOOPE (3) LOOPNZ MOV AX, 8

MOV CX,5 L1:SHL AX,CL

( )

提示:上机,SHL指令使ZF=0,LOOPE指令不可能循环。

3.25 测试AL寄存器,如果最高位和最低位同时为0,则转L0,如果最高位和最低位只有一位为1,则转L1,如果最高位和最低位同时为1,则转L2。画出流程图,并编写程序段。

ROL AL,1 AND AL,3 JZ L0 SUB AL,3 JZ L3 JMP L2

3.26 从键盘输入一个英文字母,显示输出其大写。画出流程图,并编写程序段。

3.27 从键盘输入一位数字N,显示输出N个N。画出流程图,并编写程序段。

CODE SEGMENT ASSUME CS:CODE START: MOV AH,1 INT 21H MOV DL,AL AND AL, 0FH MOV CL,AL MOV CH,0

NEXT: MOV AH,2 INT 21H LOOP NEXT

MOV 4CH INT 21H CODE ENDS END START

3.28 寄存器中为压缩的BCD码表示的十进制数,写出指令完成十进制加减计算,即计算AL+BL;AL-BL。并在DEBUG下上机验证。

(1) AL=65H,BL=37H (2) AL=98H,BL=69H

3.29 寄存器中为非压缩的BCD码表示的十进制数,写出指令完成十进制加减计算,即计算AL+BL;AL-BL。并在DEBUG下上机验证。

(1) AX=235H,BL=37H (2) AL=238H,BL=39H

3.30 用相对基址比例变址寻址方法求ARRAY行列式的值。 ARRAY DW 2,3,5 DW 1,4,6 DW 2,7,9

习题4

4.1 假设VAR1为字节变量,VAR2为字变量,LAB为标号,VAL为常量,指出下列有错误的指令,说出原因,并予纠正。

(1) ADD AX,VAR1 / ADD AL,VAR1 (2) MOV VAR2,VAR1 / MOV VAR2,AX (3) MOV VAR1,BYTE PTR VAR2 / MOV VAR1,AL

(4) MOV VAR1,OFFSET VAR2 / MOV VAR2,OFFSET VAR1 (5) MOV VAR2,OFFSET VAR1

(6) MOV VAR1,VAR2+VAR1 / MOV VAR2,VAR2-VAR1 (7) MOV VAR1,VAR2-VAR1 / MOV VAR2,VAR2-VAR1 (8) MOV VAR2,VAR2-VAR1

(9) MOV BX,VAR2+VAL-4*5 (10) MOV BX,TYPE VAL (11) MOV BX,LAB

(12) JMP VAR1 /JMP WORD PTR VAR1 (13) JMP VAR2

(14) JMP [VAL] /仅在DEBUG下可以

(15) MOV BL, VAR1 AND VAL / VAR1 AND VAL须用指令实现 (16) MOV BX, VAL AND 0FH (17) MOV BX, VAL LT 0FH

(18) MOV BL,LAB+VAR1 / MOV BL,VAR1

4.2 画图说明下列数据定义语句所示内存空间的数据,并回答寄存器的值。

ORG 0

ARRAY LABEL BYTE

DA1 DW 2,9,14,3,315H,-6 DA2 DB 7,‘ABCDEDFG’

LEN = $-DA2

联系合同范文客服:xxxxx#qq.com(#替换为@)