微机原理汇编语言习题解答
A32BEH A32BDH A32BCH A32BBH A32BAH A32B9H A32B8H
5-作业
1. 将DX.AX中32位数值除以2(右移一位)
SHR DX,1
RCR AX,1
2. 若指令执行前al=3ah,则分别执行
mov/and/or/xor al,0f1h指令及 not al指令后al=?
(答案:逻辑地址=2978H:3AE9H 物理地址=2D269H 偏移地址=3AE9H 段地址=2978H)
4.判断哪些是非法指令
MOV [1000H],[2000H] (非法) MOV DS,2000H (非法) MOV DS,BX (合法)
PUSH AL (非法)
内存
78H 56H 5FH 34H 9AH 8EH 65H
again: add al, molt
adc ah,0
loop again
mov ans,ax
作业2讲解(续)
方法三: 用移位指令实现乘法运算 20=16+4
mov al,molt
xor ah,ah
;实现AH=0,同时使CF=0
shl ax,1
;AX←2×AL
shl ax,1
;AX←4×AL
mov bx,ax
;BX←AX=4×AL
shl ax,1
;AX←8×AL
shl ax,1
;AX←16×AL
add ax,bx
;AX←16×AL+4×AL=20×AL
mov ans,ax
逻辑左移一位相当于无符号数乘以2 逻辑右移一位相当于无符号数除以2
sub ah,ah and ah,0
3.(书115页2.17题)在内存4000H开始的16KB个单元中存放一组数据,试编程顺序 将它们搬移到A000H开始的顺序16KB个单元中.注: 4000H、A000H为物理地址
next1: next2:
cmp byte ptr [si],‘A’
;循环体每次比较一个字节‘A’
jnz next2
inc dx
inc si
;SI指向下一个单元
loop next1 ;循环条件判定:循环次数减1,不为0转移(循环)
done: hlt
6-作业
1.按照如下要求定义变量:
(1) my1b为字符串变量 Personal Computer (2) my7c表示字符串 Personal Computer (3) my3b为用十六进制数表示的字节变量 20 (4) my5w为20个未赋值的字变量 (5) my6c为100的常量
需16片 2164 DRAM(书198页) 64K×1b
需64片 21256DRAM 256K×1b
需16片
2.书237页习题7 (内存地址范围40000H~BBFFFH) 分析
BBFFFH-40000H+1=7C000H字节=7C×212字节=496KB
inc
si
mov
al,BUFFER ;取1个字节需转换的二进制数的高4位
push
cx
mov
cl,4
shr
al,cl
pop
cx
call
HTOASC
;调16进制数转换成ASCC码子程序
mov hlt;
[si],al
;[si]←ASCII码 1位16进制数转换成1位ASCII 码子程序
HTOASC proc
6. (书114页习题2.13)试编程将内存从40000H到4BFFFH的每个单元中均写入55H,并再逐个读出比 较,看写入的与读出的确是否一致.若全对,则置AL为7EH;若有错,置AL为81H.
next1: next2: done:
mov cx,0C000H ;设置循环次数4BFFFH- 40000H+1
9-作业讲解
1.书237页习题1(内存RAM区改为20000H~9FFFFH) 分析
地址范围20000H~9FFFFH共有 9FFFFH-20000H+1=80000H字节=8×216字节=512K×8位 6264SRAM (13根地址线,8根数据线) 8K×8b
需64片 62256SRAM (15根地址线,8根数据线) 32K×8b
and al,0fh
cmp al,10
jc htoasc1
; <10,转htoasc1
add al,37h
; 是A ~ F,加37H
ret
; 子程序返回
2.(书114页2.7题)试编程将MOLT中的一个8位二进制乘以20,乘积放在 ANS单元及其下一个单元中 注:MOLT中的一个8位二进制数为无符号数
mov cx,4000h ;设置循环次数16KB=4000H
;设置循环初值DS:[SI]指向数据段源缓冲区开始40000H=4000H×16+0
mov ax,4000h mov ds,ax mov si,0
;设置循环初值ES:[DI]指向附加段目的缓冲区开始A0000H=A000H×16+0
mov ax,0a000h mov es,ax mov di,0 again: mov al,[si] ;循环体:实现数据传送 mov es:[di],al ;每次传送一个字节 movsb inc si ; SI和DI指向下一个单元 inc di loop again ;循环条件判定-循环次数减1,不为0转移(循环)
① 3017H:000AH
② 3015H:002AH,
③ 3010H:007AH 5.若CS=2978H, IP=6572H,求当前指令内存的逻辑地址和物理地址?(答案:
逻辑地址 2978H:6572H 物理地址 2FCF2H)
3-作业答案:
1. 访 问 I/O 时 8086CPU 的 M/IO* 是 什 么 电 平 ? ( 低 电 平 ) 8086CPU的3个最基本的读写控制信号是M/IO*、______ 和______。 (WR*, RD*)
;设置循环初值:DS:SI 指向数据段源缓冲区开始40000H
mov ax,40000H
mov ds,ax
mov SI,0
mov byte ptr [si],55H ;循环体每次写入一个字节55h
inc si ;SI指向下一个单元
loop next1
;循环次数减1,CX不为0转移(循环)
mov cx,0C000H
2.程序如下
count
db
80h, 'B',?
maxint
equ
04h
number
dw
maxint
array
db
maxint dup(3)
mov
cx,count
dec
byte ptr array-1
mov
bx,offset number
mov
ah,[bx+2]
mov
al,[bx-2]
hlt
问:程序执行后ax=?cx=?
1-作业答案:
1. 求(-122)10的原码、反码、补码? 原码=11111010B=FAH 反码=10000101B=85H 补码=10000110B=86H
2. 进行二进制数(B) 、十进制数(D) 、十六进制数(H)之间 的转换
(1) 01101001B= 69
H= 105 D
(2) 3FCAH= 0011111111001010 B
(1) MOV (2 )MOV (3) MOV (4 )MOV
AX, 2000H AX,[2000H] AX,[BX] AX,[BX+1]
(答案: (1)(2)指令寻址方式不同;(2)(4)指令执行后AX同)
2.设指令执行前DS=9AB8H, BX=873CH,AX=2345H, 分别单独执行下列指令后 AX=?
;设置循环次数
mov si,0000H
;SI 指向数据段源缓冲区开始
mov al,81H
;设有错
mov ah,[si]
;循环体每次比较一个字节55h
cmp ah,55h
jNz done:
inc si ;SI和DI指向下一个单元
loop next2
mov al,7EH
hlt
7. (书115页习题2.19)试编程序,统计由40000H开始的16KB个单元中所存放的字 符”A”的个数,并将结果存放在DX中.
2. 8086CPU预取指令时,其引脚上将产生______总线操作; 执 行 指 令 “ MOV AX , [BX]” 时 在 其 引 脚 上 将 产 生 ______总线操作;执行指令“MOV [BX],AX” 时在其 引脚上将产生______总线操作 (存储器读;存储器读; 存 储器写)
3. READY信号功能---书7页
(1) MOV AX, [BX-1]
(2) LEA AX, [BX-1]
(3) MOV AX, BX
(4) MOV AX, 873CH
(5) SUB AX, [873CH]
(6) CMP AX,[873CH]
答案: (1) AX=5F34H [BX-1] 物理地址A32BB
(2) AX=873BH=BX-1
READY 就绪(准备好)
• 输入信号,存储器或I/O口就绪 • 高电平有效表示可以进行数据读写,利用该信号无效请求处理器等待
数据 • 处理器在进行读写前检测READY引脚
– 如果测到高有效,CPU直接进入下一步 – 如果测到无效,CPU将插入等待周期
4-作业答案:
1. (1)(2)指令有何区别?以下哪些指令执行后AX同?(设BX=1FFFH)
(3) AX=873CH
(4) AX=873CH (5) AX=CCE6H=2345H-565FH [873CH]物理地址A32BC (6) AX=2345H AX不变