微机原理与接口技术(第二版)
清华大学出版社
(6) SHL 指令中,当所移位数超过 1 时,必须用 CL 取代所移位数。
3.对于下面的符号定义,指出下列指令的错误。
A1DB ?
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
13
微机原理与接口技术(第二版)
清华大学出版社
ASSUME CS : CODE , DS: DATA
START : MOV AX , DATA
2 位
低 2 位
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 的低
AND
DL , 03H ;让 DL 中仅保存移出的高 2 位数据
MOV
[DI+4] , DL ;将移出的高 2 位数据放入 SECOND 中的最高单元中 ROL
AX ,CL
;将低位数据不带进位循环左移两位,即
AX 的高2位在AL
的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
14
微机原理与接口技术(第二版)
清华大学出版社
;右移2位
LEA
SI, FIRST DI , THIRD CX ,2
LEA
MOV
CLC
MOV AX ,WORD
PTR [SI] ; AX=5F90H 为低十六位数据
INC SI
INC SI
MOV PUSH PUSH ROR
DX , WORD PTR [SI] ; DX=696EH 为高十六位数据
DX ;保存原有的高十六位数据 AX ;保存原有的低十六位数据
AX ,CL ;将低位数据不带进位循环右移两位,即低
2 位数据在 AH
的
高 2 位
AND PUSH MOV SHR POP MOV ROR
AH , 0C0H ;让 AH CX CX ,6
中仅保存移出的低 2 位数据
AH ,CL CX
[DI] , AH DX, CL
;将移出的低 2 位数据放入 THIRD
中的最低单元中
;将低位数据不带进位循环左移两位,即
AX 的高 2
位在 AL 的
低 2 位
AND MOV POP POP SHR SHR OR MOV MOV
DH , 0C0H BL ,DH AX DX
;让 DH 中仅保存移出的 DX 低2位数据
;将 DH 中的数据放入 BL 中保存 ;弹出原有的低十六位数据 ;弹出原有的高十六位数据 ;将高位数据算术逻辑左移 ;将低位数据算术逻辑左移
DX ,CL AX ,CL AH ,BL WORD WORD
PTR PTR
2 位 2 位
;将 DX 中移出的低 2 位数据放入 AX
[DI+1] , AX [DI+3] , DX
的高 2 位
15
微机原理与接口技术(第二版)
清华大学出版社
;求补
LEA LEA MOV INC SI INC SI MOV XOR XOR CLC ADD ADC MOV MOV
SI, FIRST DI , FORTH AX , WORD
PTR [SI]
; AX=5F90H 为低十六位数据
DX , WORD AX , 0FFFFH
PTR [SI]
; DX=696EH 为高十六位数据 ;将低十六位取反 ;将高十六位按位取反
DX , OFFFFH
AX , 01H DX,0 WORD WORD
;低位加 1,即可为原数的求补 ;高位加低位加法时的进位
PTR PTR
[DI] , AX [DI+2] ,DX
MOV AH ,4CH
INT 21H
CODE ENDS
END START
5. 试编程序将内存从 40000H 到 4BFFFH 的每个单元中均写入 55H,并再逐个
单元读出比较,看写入的与读出的是否一致。若全对,则将
AL 置 7EH; 只
要有错,则将 AL 置 81H 。
答:
DATA SEGMENT
DA1 DB
55H
CODE
SEGMENT
ASSUME CS:CODE,DS:DATA START:
MOV MOV MOV
AX,4000H
DS,AX
CX,0C000H BX,0000H
MOV
16