(4) 将数据段中以BX为偏移地址的连续4单元中的内容颠倒过来
MOV CX,2 ;(4/2单元个数除2,循环计数) MOV SI,BX
ADD SI,3 ;(指向最后一个数据单元,首地址+单元个数-1) LAB:MOV AL,[BX]
XCHG AL,[SI] MOV [BX],AL INC BX DEC SI LOOP LAB
(5) 将BX中的4位压缩BCD数用非压缩数形式按序放在AL,BL,CL和DL中
MOV CL,4 (注意先后次序,不能用其它寄存器) MOV DL,BL AND DL,0FH MOV AL,BH SHR AL,CL XCHG BH,BL AND BL,0FH SHR BH,CL MOV CL,BH (6)
不用乘法指令实现AL(无符号数)乘以20
AL*(24+22)( 24左移4位,22左移2位) MOV AH,0
MOV CL,2
SAL AX,CL ;进行乘4操作 MOV BX,AX ;保留乘4中间结果 SAL AX,CL;再移2次,相当于乘16 ADD AX,BX
7.10 一段数据定义为:
DATA SEGMENT S1 DB 0,1,2,3,4,5 S2 DB ‘12345’ COUNT=$-S1 NB DB 3DUP(2) NW DW 120,-256 P DW -1 DATA ENDS
(1)画出该数据段数据存储形式(注意:符号常量COUNT不分配存储单元)
地址 S1 -0000H 0001H 0002H 内容 00H 01H 02H 0003H 0004H 0005H S2 -0006H 0007H 0008H 0009H 000AH NB -000BH 000CH 000DH NW -000EH 000FH 0010H 0011H P -0012H 0013H
03H 04H 05H 31H 32H 33H 34H 35H 02H 02H 02H 78H 00H AAH FDH FFH FFH (2)在下表中填写各变量的偏移地址和各变量的值 变量名 S1 S2 NB
(3) 填写表中程序段各指令执行后。目的寄存器的值,并指出源操作数所使用的寻址方式(注意:COUNT是符号常量是立即数) 程序段 目的寄存器的值 源操作数的寻址方式 立即寻址 偏移地址 0000H 0006H 000BH 变量值 00H 31H 02H 变量名 NW P 偏移地址 000EH 0012H 变量值 0078H FFFFH MOV BX,OFFSET 0003H S1+3 MOV SI,OFFSET S2 MOV CL,COUNT MOV BP,NW+2 0006H 000BH FDAAH 立即寻址 立即寻址 直接寻址 直接寻址 MOV DX,WORD PTR 0202H NB MOV AL,[SI+3] MOV AH,[SI+BX+1] 34H 35H 变址寻址 基址变址寻址 直接寻址 MOV CH,BYTE PTR FDH NW+3
(4)改正下列不正确的指令错误
a. MOV AX,S1 改正 MOV AX,WORD PTR S1
b. MOV BP,OFFSET S2 改正 MOV BX,OFFSET S2 MOV CL,[BP] MOV CL,[BX]
c. MOV SI,OFFSET NB 改正 MOV SI,OFFSET NB MOV [SI],‘+’ MOV BYTE PTR [SI],‘+’
d. MOV DL,NW+2 改正 MOV DL, BYTE PTR NW+2
e. MOV DI,CH 改正 MOV DI,CX
f. MOV BX, OFFSET S1 改正 MOV BX, OFFSET S1 MOV DH,BX+3 MOV DH,[BX+3]
g. INC COUNT 改正 MOV BX,COUNT INC BX (符号常数不能
加1)
h. MOV NB,S2 改正 MOV AL,S2 MOV NB,AL(两个内存变量不能
直接传送)
i. MOV AX,[BX+S1] 改正 MOV AX,WORD PTR [BX+S1]