当前位置:文档之家› 微型计算机原理与接口技术(第二版)习题参考解答

微型计算机原理与接口技术(第二版)习题参考解答


mov al , ah
adc al , bl
mov result , cx
adc al , bh
daa
mov ax , [x1+1]
daa
mov cl , al
mov bx , [x2+1]
mov ch , al
mov al , ah 【解】(6)
adc al , bl
mov [result+1] , cx
; 基址变址相对寻址
寄存器寻址
(9) in al , 05
; 寄存器寻址
立即数
(10) mov ds , ax
; 寄存器寻址
寄存器寻址
2. 已知:DS=1000H,BX=0200H,SI=02H,内存 10200H~10205H 单元的内容分别为 10H,2AH,3CH,46H,59H,6BH。
下列每条指令执行完后 AX 寄存器内容各为什么?
(1) MOV AX , 0200
; 执行后,AX=0200H
(2) MOV AX , [200H]
; 执行后,AX=2A10H
(3) MOV AX , BX
; 执行后,AX=0200H
(4) MOV AX , 3[BX]
; 执行后,AX=5946H
(5) MOV AX , [BX+SI]
; 执行后,AX=463CH
题 5. 假设程序中的数据定义如下:
par
dw ?
pname db 16 dup(?)
count dd ?
plenth dw $-par 求 plenth 的值为多少?表示什么意义?
(1) mov ax , [100h]
; 直接寻址,
物理地址=10100h
(2) mov ax , val
; 直接寻址,
物理地址=10030h
(3) mov ax , [bx]
; 寄存器间接寻址,
物理地址=10100h
(4) mov ax , es:[bx]
; 寄存器间接寻址,
物理地址=20100h
mov
bx , 02h
add bx , ax
mov
dx , 03h
shr dx , 1
mov
cx , 04h
()
【解】① ax=5, bx=16, dx=0, cx=0;② ax=2, bx=4 , dx=1, cx=3;③ ax=3, bx=7 , dx=0, cx=2
二、宏汇编语言程序设计——P168
【编程如下】
edata segment estring db ‘The computer’
repe cmpsb jnz clear
edata ends code segment
mov al , 1 jmp exit
assume cs:code, ds:data, es:edata start:
clear: mov al , 0
要求用 XALT 指令将十进制数 57 转换成相应的 7 段代码值,存到 BX 寄存器中,试写出相应的程序段。
data segment table db 40h,79h,24h,30h,19h
mov ah , al and al , 0fh
db 12h,02h,78h,00h,18h num db 57h data ends ;…………………………….. code segment assume cs:code, ds: data start: mov ax , data mov ds , ax lea bx , table mov al , num
15. 编程将 AX 寄存器重的内容以相反的次序传送到 DX 寄存器中,并要求 AX 中的内容不被破坏,然后统计 DX 寄存器中 1 的个数
是多少。
【编程如下】
data segment
loop redo
mesg db ‘The count of 1 in DX register is ’
mov al , dl
xlat mov dl , al mov cl , 4 shr ah , cl mov al , ah xlat mov dh , al mov bx , dx code ends end start
1
10. 已知 X1 和 X2 的定义如下:
x1 dw 1024h
dw 2476h
x2 dw 3280h
14. 设数据段定义如下:
add sum , ax add al , 5
end begin
data segment string db ‘The Personal Computer & TV’
data ends 试用字串操作等指令编程完成以下功能:
(2)比较该字符串是否与“The computer”相同,若相同则将 AL 寄存器的内容置 1,否则置 0,并要求将比较次数送到 BL 寄存 器中。
【解】
data segment
mov ds , ax
stosb
array db 78, 65, 76 db 72, 69, 71, 75
mov es , ax lea si , array
loop redo mov ax , sum
new db ? sum dw 0
lea di , new mov ax , 0
; 错,目的操作数不能为立即数。
(3) mov ds , 0200h
; 错,不允许对段寄存器赋立即数
(4) mov [bxl , [1200h]
; 错,不允许 2 个操作数全为内存操作数
(5) mov ip , 0ffh
; 错,ip 不允许为目的操作数
(6) mov [bx+si+3] , ip
; 正确
inc dl
code ends
next:
end start
rcr dx , 1
17. 在以下程序段内的括号中分别填入指令:①loop next,②loope next,③loopne next,程序段执行完后,AX、BX、CX、DX 寄存
器的内容分别什么?
start: mov
ax , 01h
next: inc ax
mov cx , 26
(4)把字符串大写字母传送到附加段中以 CAPS 开始的单元中,其余字符传送到以 CHART 开始的单元中。然后将数据段中
存储上述字符串的单元清 0。
【编程如下】
count equ 26
mov ax , edata
edata segment
mov es , ax
caps db 30 dup(0)
(7) mov ax , [bx][bp]
; 错,bx 和 bp 不能共用
(8) mov al , es:[bp]
; 正确
(9) mov dl , [si][di]
; 错,si 和 di 不允许共用
(10) mov ax, offset 0a20h
; 错,立即数没有偏移量
(11) mov al , offset table
; 寄存器寻址
寄存器间接寻址
(4) mov 5[bx] , bl
; 寄存器相对寻址
寄存器寻址
(5) mov [bp+100] , ax
; 寄存器相对寻址
寄存器寻址
(6) mov [bx+di] , ‘$’
; 基址变址寻址
立即数
(7) mov dx , es:[bx+si]
; 寄存器寻址
基址变址寻址
(8) mov val[bp+di] , dx
n db 0, 0, 0dh, 0ah, ‘$’
mov ah , 0
data ends
mov bl , 10
code segment
div bl
assume cs:code, ds:data
add al , 30h
start:
add ah , 30h
mov ax , data
mov bx , offset n
(6) MOV AX ,2 [BX+SI]
; 执行后,AX=6B59H
3. 设 DS=100H,ES200H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,数据段中变量名为 VAL 的偏移
地址值为 0030H,试说明下列源操作数字段的寻址方式是什么?物理地址是多少?
lea si , string
chart db 30 dup(0)
lea di , caps
edata ends
lea bx , chart
code segment
cld
assume cs:code, ds:data, es:edata
mov cx , count
start:
redo:
mov ax , data
mov ax , [x1]
mov bl , 6
aam
and ax , 000fh
mul bl
mov result , ax
12. 某班有 7 个同学的英语成绩低于 80 分,分数存在 array 数组中,试编程完成以下工作:(1)给每人加 5 分,结果存到 new 数
组中。(2)把总分存到 sum 单元中。(3)把平均分存到 average 单元中。
mov ds , ax
mov [bx] , al
xor dx , dx
mov [bx+1] , ah
mov cx , 16
mov dx , offset mesg
mov dl , 0
mov ah , 9h
redo:
相关主题