微机原理与接口技术(第二版)清华大学出版社 下载本文

内容发布更新时间 : 2024/4/30 22:48:09星期一 下面是文章的全部内容请认真阅读。

答:MOV AX, 1234H (AX)=1234H, CF=0,SF=0,ZF=0 MOV CL, 4

ROL AX,CL (AX)=2341H,CF=1,SF=0,ZF=0 DEC AX (AX)=2340H,CF=1,SF=0,ZF=0 MOV CX,4

MULL CX (AX)=8D00H, CF=0,SF=1,ZF=0

INT 20H

结束后,(DX)=0000H, (AX)=8000H

9. 试分析下列程序段:

ADD AX, BX JNC L2 SUB AX, BX JNC L3 JMP SHORTL5

如果AX,BX的内容给定如下:

AX BX (1) 14C6H 80DCH (2) B568H 54B7H

问该程序在上述情况下执行后,程序转向何处。 答:(1)转到L2处 (2)转到L3处

习题4

1.下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。

VAR1 DB 10,2

VAR2 DW 5 DUP(?),0

VAR3 DB ‘HOW ARE YOU?’,3 DUP(1,2) VAR4 DD -1,1,0 答:字节空间:

VAR1:2; VAR2:12; VAR3:13; VAR4:8。 存储空间的分配图:

2.假定VAR1 和VAR2 为字变量,LAB 为标号,试指出下列指令的错误之处。 (1)ADD VAR1,VAR2 (3)JMP LAB[CX]

(2)SUB AL,VAR1 (4)JNZ VAR1 (6)SHL AL, 4

(5) MOV [1000H],100

答:(1) 在算术运算指令中,两个操作数不能同时为存储器寻址方式 (2) AL 为字节,VAR1 为字变量,字长不相等;

(3) 错误1:寄存器相对寻址方式,只能使用基址或变址寄存器,不能使用CX寄存器。

错误2:汇编格式错误,无法判段是段内转移还是段间转移。 (4) 转向地址应为标号,不能是变量;

(5) 目的操作数的类型不确定;

(6) SHL 指令中,当所移位数超过1 时,必须用CL取代所移位数。

3.对于下面的符号定义,指出下列指令的错误。

A1 DB ? A2 DB 10 K1 EQU 1024

(1) MOV K1,AX (2)MOV A1,AX (3)CMP A1,A2 (4)K1 EQU 2048 答:(1)K1 为常量,不能用MOV 指令赋值; (2)A1 为字节,AX 为字变量,类型不一致; (3)A1 和A2同为存储器寻址方式,不符合语法规则; (4)K1 重新赋值前,必须用PURGE 释放。

4.数据定义语句如下所示: FIRST DB 90H,5FH,6EH,69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?) FORTH DB 4 DUP (?)

自FIRST 单元开始存放的是一个四字节的十六进制数(低位字节在前),要求: 编一段程序将这个数左移两位后存放到自SECOND 开始的单元,右移两位后存放到自THIRD 开始的单元,求补后放到FORTH开始的单元。(注意保留移出部分) 答:

DATA SEGMENT

FIRST DB 90H,5FH,6EH,69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?) FORTH DB 4 DUP (?) DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA

MOV DS,AX LEA SI,FIRST LEA DI,SECOND MOV CX,2 CLC

;左移2 位

MOV AX,WORD PTR [SI] ;AX=5F90H 为低十六位数据 INC SI INC SI

MOV DX,WORD PTR [SI] ;DX=696EH 为高十六位数据 PUSH DX ;保存原有的高十六位数据 PUSH AX ;保存原有的低十六位数据 ROL DX,CL

;将高位数据不带进位循环左移两位,即高2 位数据在DL 的低

2 位

AND DL,03H ;让DL 中仅保存移出的高2 位数据 MOV [DI+4] ,DL;将移出的高2 位数据放入SECOND 中的最高单元中 ROL AX,CL

;将低位数据不带进位循环左移两位,即AX 的高2 位在AL 的低

2 位

AND AL,03H;让AL 中仅保存移出的AX 高2 位数据 MOV BL ,AL;将AL 中的数据放入BL 中保存 POP AX;弹出原有的低十六位数据 POP DX;弹出原有的高十六位数据

SHL DX,CL;将高位数据算术逻辑左移2 位 SHL AX,CL;将低位数据算术逻辑左移2 位

OR DL,BL;将AX 中移出的高2 位数据放入DX 的低2 位 MOV WORD PTR [DI] ,AX MOV WORD PTR [DI+2] ,DX

;右移2 位

LEA SI,FIRST LEA DI,THIRD MOV CX,2 CLC

MOV AX,WORD PTR [SI] ;AX=5F90H 为低十六位数据 INC SI INC SI

MOV DX,WORD PTR [SI] ; DX=696EH 为高十六位数据 PUSH DX;保存原有的高十六位数据 PUSH AX;保存原有的低十六位数据

ROR AX,CL;将低位数据不带进位循环右移两位,即低2 位数据在AH 的高2 位

AND AH,0C0H;让AH 中仅保存移出的低2 位数据 PUSH CX MOV CX,6 SHR AH,CL POP CX

MOV [DI] ,AH ;将移出的低2 位数据放入THIRD 中的最低单元中 ROR DX, CL

;将低位数据不带进位循环左移两位,即AX 的高2 位在AL 的低

2 位

AND DH,0C0H ;让DH 中仅保存移出的DX 低2 位数据 MOV BL ,DH ;将DH 中的数据放入BL 中保存 POP AX ;弹出原有的低十六位数据 POP DX ;弹出原有的高十六位数据 SHR DX,CL ;将高位数据算术逻辑左移2 位 SHR AX,CL ;将低位数据算术逻辑左移2 位

OR AH,BL ;将DX 中移出的低2 位数据放入AX 的高2 位 MOV WORD PTR [DI+1] , AX MOV WORD PTR [DI+3] ,DX