当前位置:首页 > 《微型计算机原理与接口技术》周荷琴 - 吴秀清(第三版)课后习题答案
(3)11000111 10000111 00000000 00000001 01010000 00110001B 5. 已知程序的数据段为: DATA SEGMENT A DB ?$?,10H
B DB ?COMPUTER? C DW 1234H, 0FFH D DB 5 DUP(?) E DD 1200459AH DATA ENDS
求下列程序段执行后的结果是什么。 MOV AL, A MOV DX, C XCHG DL, A
MOV BX, OFFSET B MOV CX, 3[BX] LEA BX, D LDS SI, E LES DI, E
答:MOV AL, A AL=24H MOV DX, C DX=1234H
XCHG DL, A DL=24H, A=34H MOV BX, OFFSET B BX=2 MOV CX, 3[BX] CX=5550H LEA BX, D BX=000EH
LDS SI, E DS=1200H, SI=459AH LES DI, E ES=1200H, DI=459AH
6. 指出下列指令中哪些是错误的,错在什么地方。
(1)MOV DL,AX (2)MOV 8650H,AX (3)MOV DS,0200H
(4)MOV [BX],[1200H] (5)MOV IP,0FFH (6)MOV [BX+SI+3],IP (7)MOV AX,[BX][BP] (8)MOV AL,ES:[BP] (9)MOV DL,[SI][DI] (10)MOV AX,OFFSET 0A20H (11)MOV AL,OFFSET TABLE (12)XCHG AL,50H (13)IN BL,05H (14)OUT AL,0FFEH 答:(1)长度不匹配 (2)立即数不能做目的操作数
(3)段寄存器不能用立即数赋值 (4)两个内存单元不能直接传送数据 (5)IP 不能用指令直接修改 (6)指令中不能出现 IP (7)BX/BP 应与 SI/DI 搭配 (8)正确
(9)SI/DI 应与 BX/BP 搭配 (10)OFFSET 后应跟内存单元
(11)偏移地址为16 位,AL 长度不够 (12)立即数不能用于XCHG (13)IN 必须用 AL/AX (14)操作数顺序反向;地址应为 8 位 7. 已知当前数据段中有一个十进制数字0~9 的7 段代码表,其数值依次为40H,79H,24H, 30H,19H,12H,02H,78H,00H,18H。要求用XLAT 指令将十进制数57 转换成相应的
7 段代码值,存到BX 寄存器中,试写出相应的程序段。 答: DATA SEGMENT
TABLE DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,18H DATA ENDS ……
MOV AL,5
MOV BX,OFFSET TABLE XLAT TABLE MOV CL,AL MOV AL,7 XLAT TABLE MOV BL,AL MOV BH,CL
8. 已知当前SS=1050H,SP=0100H,AX=4860H,BX=1287H,试用示意图表示执行下列指 令过程中,堆栈中的内容和堆栈指针SP 是怎样变化的。 PUSH AX PUSH BX POP BX POP AX 答:(1)指令执行前 (2)执行PUSH AX 后 …… 10500H
(3)执行PUSH BX 后 (4)执行POP BX 后 (5)执行POP AX 后 …… 87H 12H 60H 48H
9. 下列指令完成什么功能?
(1)ADD AL,DH (2)ADC BX,CX (3)SUB AX,2710H (4)DEC BX (5)NEG CX (6)INC BL (7)MUL BX (8)DIV CL 答:(1)AL+DH→AL (2)BX+CX+CF→BX (3)AX-2710H→AX (4)BX-1→BX (5)0-CX→CX (6)BL+1→BL
(7)AX*BX→DX,AX (8)AX/CL 商→AL,余数→AH
10. 已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每条指令执行后的结果 是什么?标志位CF 等于什么?
(1)AND AH,CL (2)OR BL,30H (3)NOT AX SP-> SP-> 10500H …… 60H 48H SP->
……
10500H 10500H …… 48H 60H 12H 87H SP-> 48H 60H 12H 87H 10500H SP->
(4)XOR CX,0FFF0H (5)TEST DH,0FH (6)CMP CX,00H (7)SHR DX,CL (8)SAR AL,1 (9)SHL BH,CL (10)SAL AX,1 (11)RCL BX,1 (12)ROR DX,CL 答:(1)AX=0408H,CF=0 (2)BX=0F36H,CF=0 (3)AX=0DAF7H,CF 不变 (4)CX=0FFF4H,CF=0 (5)DX=01864H,CF=0 (6)CX=0004H,CF=0 (7)DX=0186H,CF=0 (8)AX=2504H,CF=0 (9)BX=0F036H,CF=0 (10)AX=4A10H,CF=0
(11)BX=1E6C/1E6DH,CF=0 (12)DX=4186H,CF=0 11. 假设数据段定义如下: DATA SEGMENT
STRING DB ?The Personal Computer & TV? DATA ENDS
试用字符串操作等指令编程完成以下功能:
(1)把该字符串传送到附加段中偏移量为GET_CHAR 开始的内存单元中。
(2)比较该字符串是否与?The Computer?相同,若相同则将AL 寄存器的内容置1,否则置 0。并要求将比较次数送到BL 寄存器中。
(3)检查该字符串是否有?&?,若有则用空格字符将其替换。
(4)把字符串大写字母传送到附加段中以CAPS 开始的单元中,其余字符传到以CHART 开始的单元中。然后将数据段中存储上述字符串的单元清0。 答:(1) CLD LEA SI,STRING LEA DI,GET_CHAR MOV CX,26 REP MOVSB
(2)补充在附加段定义 STRING1 DB ?The computer? MOV AL,1 CLD
LEA SI,STRING
LEA DI,STRING1 MOV CX,12 REPZ CMPSB JZ SKIP MOV AL,0
SKIP: MOV BX,12 SUB BX,CX
(3) MOV AX, DATA MOV ES, AX CLD
MOV AL,'&' LEA DI,STRING MOV CX,26
NEXT: REPNE SCASB JZ FIND JMP EXIT
FIND: MOV BYTE PTR [DI-1], ' ' JCXZ EXIT JMP NEXT EXIT:
(4) LEA SI,STRING LEA DI,CAPS LEA BX,CHART MOV CX,26
NEXT: MOV AL, [SI] CMP AL,?A? JB OTHER CMP AL,?Z? JA OTHER
MOV ES:[DI],AL INC DI JMP SKIP
OTHER: MOV ES:[BX],AL INC BX
SKIP: MOV BYTE PTR[SI],0 INC SI
LOOP NEXT
12. 编程将AX 寄存器中的内容以相反的顺序传送到DX 寄存器中,并要求AX 中的内容不
被破坏,然后统计DX 寄存器中?1?的个数是多少。 答:: MOV BL,0 PUSH AX MOV DX,0 MOV CX,16
共分享92篇相关文档