微型计算机科学出版社第3章作业答案

发布 2023-05-21 13:38:28 阅读 5737

第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 说明下列...