第3章指令系统。
3.9 设段寄存器ds=1000h,ss=2000h,es=3000h,通用寄存器bx=4000h,bp=5000h,si=6000h,di=7000h。在下列各指令中指出存储器操作数的寻址方式,求出有效地址ea、物理地址pa,并分别用物理地址和逻辑地址说明指令执行结果。
1)mov cx, [2300h]
直接寻址。ea=2300h
pa=ds*16+ea=1000h*16+2300h=12300h
执行结果:(12300h)→cl,(12301h)→ch
2)mov byte ptr [bx], 8fh
寄存器间接寻址。
ea=bx=4000h
pa=ds*16+ea=1000h*16+4000h=14000h
执行结果:8fh→(14000h)
3)mov dh, [bp+3000h]
基址寻址。ea=bp+3000h=8000h
pa=ss*16+ea=2000h*16+8000h=28000h
执行结果:(28000h)→dh
4)mov es: [si+1210h], ax
变址寻址。ea=si+1210h=7210h
pa=es*16+ea=3000h*16+7210h=37210h
执行结果:al→(37210h),ah→(37211h)
5)mov [bx+di+50h], al
基址变址位移寻址。
ea=bx+di+50h=0b050h
pa=ds*16+ea=1000h*16+0b050h=1b050h
执行结果:al→(1b050h)
6)inc word ptr [bx+si]
基址变址寻址。
ea=bx+si=0a000h
pa=ds*16+ea=1000h*16+0a000h=1a000h
执行结果:(1a000h)中存放的字的值加1
3.11 指出下列指令中源操作数的寻址方式。
1)mov bl, 0f9h 立即寻址。
2)add [bx], si寄存器寻址。
3)sub cl, [4000h] 直接寻址。
4)cmp dx, [si寄存器间接寻址。
5)and sl, [bx+1] 基址寻址。
6)or bp, [di+2100h] 变址寻址。
7)xor ax, [bp+si] 基址变址寻址。
8)mov cx, 300立即寻址。
3.12 下列指令都是非法的,指出各指令错在**?
1)mov si, ah
两个操作数字长不一致。
2)mov 70h, bl
立即数不能做目的操作数。
3)mov cx, f123h
十六进制的数以字母打头必须在前面补0
4)mov [bx], 6ah
两个操作数的字长不确定。
5)mov es, 5000h
立即数不能直接送段寄存器。
6)mov [di], 3000h]
两个操作数不能同为内存操作数。
7)mov ds, ss
两个操作数不能同为段寄存器。
8)mov cs, ax
不能对cs赋值。
9)mov al, [cx]
寄存器间接寻址中不能使用cx
10)mov [bx+bp], dx
存储器寻址方式中表示有效地址不能同为两个基址寄存器。
11)mov bh, [si+di+2]
存储器寻址方式中表示有效地址不能同为两个变址寄存器。
12)push al
入栈出栈操作必须以字为单位。
13)lea ax, bx
lea指令中源操作数必须为存储器寻址方式。
14)lds bl, [5100h]
lds指令中目的操作数必须为16位的通用寄存器。
15)in ah, dx
in指令中目的操作数必须为al或ax
16)out 288h, al
输入输出指令中端口地址为16位,必须先送给dx
17)add [2400h], 1234h
两个操作数的字长不确定。
18)xor [2500h], bx+10h]
两个操作数不能同为内存操作数。
19)inc [si]
操作数的字长不确定。
20)mul 10
mul指令的操作数不能为立即数。
21)idiv [bp+di+1300h]
操作数的字长不确定。
22)sal al, 2
移位次数大于1必须先送给cl
3.14 设sp=2000h,ax=3000h,bx=5000h,执行以下3条指令后,问sp=?ax=?bx=?
push ax ;sp减2,栈顶元素为3000h
push bx ;sp减2,栈顶元素为5000h
pop ax ;sp加2,将栈顶元素5000h弹出至ax
结果:sp=1ffeh,ax=5000h,bx=5000h
3.16 下列程序执行完后,ax=?bx=?cx=?
mov ax, 1122h
mov bx, 3344h
push ax栈顶元素为1122h
pop cx将栈顶元素1122h弹出至cx
xchg bx, cx ;bx=1122h,cx=3344h
lea cx, [bxcx=bx=1122h
结果:ax=1122h,bx=1122h,cx=1122h
3.17 cpu分别执行下列各程序段后,写出各个执行结果的状态标志位of、sf、zf、af、pf、cf的值。
1) mov al, 7ah
add al, 53h
7ah+53h=cdh=1100 1101b
结果:of=1,sf=1,zf=0,af=0,pf=0,cf=0
2) mov bl, 0afh
add bl, 0eah
afh+eah=(1)99h=1001 1001b
结果:of=0,sf=1,zf=0,af=1,pf=1,cf=1
3) mov cl, 0ffh
add cl, 01h
ffh+01h=(1)00h=0000 0000b
结果:of=0,sf=0,zf=1,af=1,pf=1,cf=1
4) mov dl, 49h
sub dl, 0cah
49h-cah=(1)7fh=0111 1111b
结果:of=0,sf=0,zf=0,af=1,pf=0,cf=1
3.18 有两个32位的二进制数,分别存放在两个16位寄存器cx:dx和两个16位寄存器si:
di中,求两数之和,并将和放在两个16位寄存器axbx中,即ax:bx← cx:dx+si:
di。试编写程序。
add dx,di
adc cx,si
mov bx,dx
mov ax,cx
3.23 分别说明下面两条除法指令中被除数、除数、商、余数所在的位置。
(1) div cx
被除数:dx:ax
除数:cx商:ax
余数:dx(2) idiv cl
被除数: ax
除数:cl商:al
余数:ah3.25 分别写出cpu执行下面两段程序后,寄存器al=?标志cf=?
1) mov al, 36h
add al, 58h
daa36h+58h=8eh,低4位大于9,故修正:
al=8eh+6h=94h,cf=0
2) mov al, 49h
add al, 87h
daa49h+87h=d0h,af=1,高4位大于9,故修正:
al=d0h+66h=(1)36h,cf=1
3.29 有如下程序段。
mov al, 45h
add al, 71h ;al=45h+71h=0b6h,cf=0
daaal=al+60h=16h,cf=1
mov bl, al ;bl=16h
adc al, 19h ;al=16h+19h+1=30h,af=1
daaal=al+6h=36h=00110110,cf=0,pf=1
mov bh, al ;bh=36h
问,执行完此程序段后,bx=?,标志位pf=?,cf=?
结果:bx=3616h,pf=1,cf=0
3.30 分别只使用一条指令实现下述功能。
1)使al的低4位清0,高4位不变;
and al, 0f0h
2)使di的高10位清0,低6位不变;
and di, 3fh
3)使bl的低4位置1,高4位不变;
or bl, 0fh
4)使si的高2位置1,低14位不变;
or si, 0c000h
5)使cl的d2、d3、d4、d5、d6位取反,d0、d1、d7位不变;
xor cl, 7ch
6)使bp的高4位取反,低12位不变;
xor bp, 0f000h
3.32 写出用一条指令使ax清0的一些指令。
mov ax, 0
sub ax, ax
and ax, 0
xor ax, ax
3.34 用最少的指令实现下述功能。
1)使al的低4位移到高4位,低4位清0;
mov cl, 4
shl al, cl(或sal al, cl)
2)使ah的高4位移到低4位,高4位清0。
mov cl, 4
shr ah, cl
3.37 编程实现如下功能。
1)将al的低6位移到高6位,高2位移到低2位;
mov cl, 2
rol al, cl
2)将bl的高6位移到低6位,低2位移到高2位;
mov cl, 2
ror bl, cl
3)将bh的高4位与低4位交换;
mov cl, 4
rol bh, cl(或ror bh, cl)
4)将bp的高8位与低8位交换。
mov cl, 8
rol bp, cl(或ror bp, cl)
3.39 设ax=1234h,cx=9602h,下列程序执行完后,al=?
and al, ah ;al=12h and 34h=10h=0001 0000b
shl al, cl ;al=0100 0000b=40h
or al, ch ;al=40h or 96h=0d6h=1101 0110b
sar al, cl ;al=1111 0101b=0f5h
xor al, cl ;al=0f5h xor 02h=0f7h=1111 0111b,cf=0
rcl al, 1 ;al=1110 1110b=0eeh
结果:al=0eeh
3.45有如下程序段。
mov sp,3008h
mov ax,[di]
rct: call psub1
mov [di],ax
psub1:push ax
push bx
ret问,当执行完push bx 指令后,sp = 3002h ;当执行完ret指令后,ip = bx 。
3.48若cpu中各寄存器及存储器参数如题图所示,试求独立执行如下指令后,cpu相应寄存器及存储器相应单元的内容是多少?
微型计算机作业
第一章概述 1 简述微型计算机硬件系统和软件系统的构成。2 从cpu发展历史看,cpu的发展趋势是什么?3 什么是总线?为什么计算机系统采取总线结构?4 何为cpu的寻址空间?寻址空间决定于什么?第二章微型计算机的基本工作原理 书本第三章 1 p70 3.2 2 p70 3.5 第三章 16位微处理...
微型计算机作业
1 某8086cpu微机系统与8255a接口图如图1所示,74ls138为3 8译码器,g1 g2a g2b为译码器的使能端,g1高平有效,g2a和g2b低平有效,yi i 0 7 为译码器输出,低平有效。方式选择控制字如图2 1 分析8255a的四个端口地址 没用到的地址线看做为1 2 试编一个8...
微型计算机作业讲评
第四章 8086cpu指令系统。一填空题。1 执行系列指令后 mov al,7 mov bl,9 mul bl 结果为 ax 003fh 2 假设程序段如下 mov ax,5439h mov bx,456ah add ax,bx 则ax 99a3hcf 0 pf 1 af 1 of 1 3 说明下列...