第6章作业
6.2* 请计算如下各数值表达式的值: (1)23H AND 45H OR 67H 答:表达式的值为67H (2)1234H/16+10H
答:表达式的值为133H
(3)NOT ( 65535 XOR 1234H ) 答:表达式的值为1234H (4)1024 MOD 7+3
答:表达式的值为149
(5)LOW 1234 OR HIGH 5678H
答:即6EH OR 56H,故表达式的值为7EH (6)23H SHL 4
答:表达式的值为230H (7)’E’ GE 45 XOR -1
答:即0FFFFH XOR 0FFFFH,表达式的值为00H (8)’a’ AND ( NOT ( ‘a’ – ‘A’ ) ) 答:表达式的值为41H
6.3 计算下列地址表达式的值,设BX=1000H,SI=2000H,DI=3000H,BP=4000H: (1)[BX + 100H]
答:EA=1000H+ 100H=1100H (2)[DI][BP]
答:EA=4000H+3000H=7000H (3)2000H[SI]
答:EA=2000H+2000H=4000H (4)10H[BX][SI]
答:EA=1000H+2000H+10H=3010H (5)[BP-128]
答:EA=4000H-128=4000H-80H=3F80H (6)[BX][DI-2]
答:EA=1000H+3000H-2=3FFEH
6.4 定义的数据段如下,请根据该数据段画出该段中数据存储的形式。
DATA SEGMENT
STR1 DB 0,1,2,3,4,5 STR2 DB ‘012345’ COUNT EQU 30
NUMB DB 4 DUP(2) NUMW DW 0FH,-80H POIN DW 0
DATA ENDS
答:该段中数据存储如下:
变量 STR1
存储数据 0 105
段内偏移(EA) 0000H
STR2 NUMB NUMW POIN 1 2 3 4 5 0001H 0002H 0003H 0004H 0005H ‘0’ 0006H ‘1’ 0007H ‘2’ 0008H ‘3’ 0009H ‘4’ 000AH ‘5’ 000BH 2 2 2 2 0FH 00H 80H 0FFH 0 0 000CH 000DH 000EH 000FH 0010H 0011H 0012H 0013H 0014H 0015H 6.5 根据题6.4定义的数据段,请写出下列程序段中各语句执行后寄存器的内容,并指出源操作数的寻址方式。
MOV BX,OFFSET STR1+3 答:BX=0003H,立即寻址 MOV SI,OFFSET STR2 答:SI=0006H,立即寻址 MOV CL,COUNT
答:CL=1EH,立即寻址 MOV DX,WORD PTR NUMB 答:DX=0202H,直接寻址 MOV BP,NUMW+2
答:BP=0FF80H,直接寻址 MOV AL,3[SI] 答:AL=‘3’,相对基址寻址 MOV AH,[SI+BX+1] 答:AH=‘4’,相对基址变址寻址 MOV CH,BYTE PTR NUMW+3 答:CH=0FFH,直接寻址
6.6* 自12F8:0000开始的内存单元中存放以下数据(用十六进制形式表示):28 09 16 B5 A6 68 00 00,试分别写出12F8:0000单元开始的字节型数据、字型数据及双字型数据的值。
答:12F8:0000单元开始的字节型数据是:28H 09H 16H B5H A6H 68H 12F8:0000单元开始的字型数据是:0928H B516H 68A6H 12F8:0000单元开始的双字型数据是:B5160928H 000068A6H
106
6.7* 某程序中的数据段内容如下所示,请指出变量BUF和NUM的偏移地址为多少?
DATA SEGMENT
ORG 10
BUF DB 'ABCDE' ;10-14 ORG ﹩+5 ;15+5 NUM DW 50 DATA ENDS
答:变量BUF的偏移地址为000AH,变量NUM的偏移地址为0014H 6.8 变量D1和D2定义如下:
D1 DB 20 DUP(?) D2 DW D1
请写出取变量D1的偏移地址到寄存器SI中的三种方法。 答:① LEA SI, D1 ② MOV SI, OFFSET D1 ③ MOV SI, D2 6.9* 求下列指令汇编的结果。
MOV AX,68/9
答:汇编语言指令为:MOV AX,3FH MOV AX,75 MOD 6
答:汇编语言指令为:MOV AX,03H MOV AX,123*4
答:汇编语言指令为:MOV AX,1ECH MOV AL,49H SHL 3
答:汇编语言指令为:MOV AL,48H MOV AL,68H SHR 2
答:汇编语言指令为:MOV AL,17H MOV AL,NOT 0A5H
答:汇编语言指令为:MOV AL,5AH AND AL,46H AND 0F0H
答:汇编语言指令为:AND AL,40H MOV AL,78H OR 20H
答:汇编语言指令为:MOV AL,78H XOR AL,90H XOR 0F4H
答:汇编语言指令为:XOR AL,64H MOV AL,63H EQ 2
答:汇编语言指令为:MOV AL,00H MOV AL,45H GT 45
答:汇编语言指令为:MOV AL,0FFH
6.10 设如下两条指令中的符号ABCD是变量名,请说明这两条指令的异同。
MOV AX, OFFSET ABCD LEA AX, ABCD
答:两条指令的形式不同但功能相同,都是传送变量ABCD的偏移地址,前者是MOV指令后者是LEA指令。
6.11* 请指出如下指令中的不明确之处,并使其明确: (1)MOV ES:[BP],5
答:指令可改写为:MOV BYTE PTR ES:[BP],5
107
(2)ADD CS:[1000H],10H
答:指令可改写为:ADD BYTE PTR ES:[1000H],10H (3)DEC SS:[BX-8]
答:指令可改写为:DEC BYTE PTR SS:[BX-8] (4)JMP CS:[SI+1000H]
答:指令可改写为:JMP DWORD PTR [SI+1000H]
6.12* 设在某个程序中有如下片段,请改正其中有错误的指令语句:
VARW DW 1234H,5678H VARB DB 3,4
VARD DD 12345678H … …
MOV AX,VARB (可改为:MOV AX,VARW 或 MOV AX,WORD PTR VARB) MOV VARD,BX (可改为:MOV VARW, BX 或 MOV WORD PTR VARD,BX) MOV VARD+2,ES (可改为:MOV VARW+2,ES 或 MOV WORD PTR VARD+2,ES) MOV CL,VARW+3 (可改为:MOV CL, VARB+2 或 MOV CL, BYTE PTR VARW+3) LES DI,VARW (正确)
第7章作业
1.实现W=(3X+6Y)*4-8Z,设X=5, Y=3, Z=19 解:源程序如下:
DSEG SEGMENT
X DB 5 Y DB 3 Z DB 19 W DW ? DSEG ENDS CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG
MOV AX, DSEG MOV DS, AX
BEGIN: MOV AL, X
MOV BL, AL SHL AL, 1
ADD AL, BL ; AL=3X MOV BL, Y SHL BL, 1 MOV BH, BL SHL BL, 1
ADD BL, BH ; BL=6Y
ADD AL, BL ; AL=(3X+6Y) MOV BL, 4
MUL BL ; AX=(3X+6Y)*4 MOV BX, AX ; BX=(3X+6Y)*4 MOV AL, Z
108