期中复习提纲.docx

上传人:b****5 文档编号:29970113 上传时间:2023-08-03 格式:DOCX 页数:25 大小:23.63KB
下载 相关 举报
期中复习提纲.docx_第1页
第1页 / 共25页
期中复习提纲.docx_第2页
第2页 / 共25页
期中复习提纲.docx_第3页
第3页 / 共25页
期中复习提纲.docx_第4页
第4页 / 共25页
期中复习提纲.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

期中复习提纲.docx

《期中复习提纲.docx》由会员分享,可在线阅读,更多相关《期中复习提纲.docx(25页珍藏版)》请在冰豆网上搜索。

期中复习提纲.docx

期中复习提纲

〔习题 1.19〕什么是 8086 中的逻辑地址和物理地址?

逻辑地址如何转换成物理地址?

请将

如下逻辑地址用物

理地址表达:

(1)FFFFh:

(2)40h:

17h (3)2000h:

4500h (4)B821h:

4567h

〔解答〕

在 8086 处理器中,对应每个物理存储单元都有一个唯一的 20 位编号,就是物理地址,从

00000H~FFFFFH。

在 8086 内部和用户编程时,采用的段基地址 :

 段内偏移地址形式称为逻辑地址。

将逻辑地址中的段地址左移二进制 4 位(对应 16 进制是一位,即乘以 16),加上偏移地址

就得到 20 位物理地

如下逻辑地址用物理地址表达:

(1)FFFFh:

0=FFFF0H

(2)40h:

17h=00417H

(3)2000h:

4500h=24500H

(4)B821h:

4567h=BC777H(不要算错)

 

〔习题 2.1〕已知 DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次

存放 12 34 56 78H,[21200H]~[21203H]依次存放 2A 4C B7 65H,说明下列每条指令执行完后

AX 寄存器的内容。

(1) mov ax,1200h

(2) mov ax,bx

(3) mov ax,[1200h]

(4) mov ax,[bx]

(5) mov ax,[bx+1100h]

(6) mov ax,[bx+si]

(7) mov ax,[bx][si+1100h]

〔解答〕

(1)AX=1200H

(2)AX=0100H

(3)AX=4C2AH ;偏移地址=bx=0100h

(4)AX=3412H ;偏移地址=bx=0100h

(5)AX=4C2AH ;偏移地址=bx+1100h=1200h

(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h

(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h

 

〔习题 2.2〕指出下列指令的错误

(1) mov cx,dl

(2) mov ip,ax

(3) mov es,1234h

(4) mov es,ds

(5) mov al,300

(6) mov [sp],ax

(7) mov ax,bx+di

(8) mov 20h,ah

〔解答〕

(1)两操作数类型不匹配

(2)IP 指令指针禁止用户访问

(3)立即数不允许传给段寄存器

(4)段寄存器之间不允许传送

(5)两操作数类型不匹配

(6)目的操作数应为[ SI ]

(7)源操作数应为 [BX+DI]

(8)立即数不能作目的操作数

 

〔习题 2.6〕给出下列各条指令执行后 AL 值,以及 CF、ZF、SF、OF 和 PF 的状态:

mov al,89h

add al,al

add al,9dh

cmp al,0bch

sub al,al

dec al

inc al

〔解答〕

mov al,89h; AL=89h CF ZF SF OF PF

add al,al; AL=12h 1 0 0 1 1

; 1000 1001

+1000 1001

10001 0010

 

add al,9dh; AL=0afh 0 0 1 0 1

; 0001 0010

+ 1001 1101

1010 1111

 

cmp al,0bch; AL=0afh 1 0 1 0 1

; 1010 1111

-1011 1100

* 0100 0011

 

sub al,al; AL=00h 0 1 0 0 1

 

dec al; AL=0ffh 0 0 1 0 1

; 0000 0000

- 0000 0001

*1111 1111

 

inc al; AL=00h 0 1 0 0 1

;1111 1111

+0000 0001

*1111 1111

 

〔习题 2.8〕请分别用一条汇编语言指令完成如下功能:

(1)把 BX 寄存器和 DX 寄存器的内容相加,结果存入 DX 寄存器。

(2)用寄存器 BX 和 SI 的基址变址寻址方式把存储器的一个字节与 AL 寄存器的内容相加,

并把结果送到 AL 中

(3)用 BX 和位移量 0B2H 的寄存器相对寻址方式把存储器中的一个字和 CX 寄存器的内容

相加,并把结果送回

存储器中。

(4)用位移量为 0520H 的直接寻址方式把存储器中的一个字与数 3412H 相加,并把结果送

回该存储单元中。

(5)把数 0A0H 与 AL 寄存器的内容相加,并把结果送回 AL 中。

〔解答〕

(1)ADD DX,BX

(2)ADD AL,[BX+SI]

(3)ADD [BX+0B2H],CX

(4)ADD WORD PTR [0520H],3412H

(5)ADD AL,0A0H

 

〔习题 2.9〕设 X、Y、Z、V 均为 16 位带符号数,分别装在 X、Y、Z、V 存储单元中,阅读

如下程序段,得出它

的运算公式,并说明运算结果存于何处。

mov ax,X;ax=X

imul Y;DX.AX=X*Y

 

mov cx,ax ;cx=X*Y 的低 16 位

mox bx,dx ;bx=X*Y 的高 16 位

 

mov ax,Z;ax=Z

cwd

add cx,ax ;cx=Z 的低 16 位+X*Y 的低 16 位

adc bx,dx ;bx=Z 的高 16 位+X*Y 的高 16 位+低位进位

 

sub cx,540 ;cx=Z 的低 16 位+X*Y 的低 16 位-540

sbb bx,0;bx=Z 的高 16 位+X*Y 的高 16 位+低位进位-低位借位

 

mov ax,V;ax=V

cwd

sub ax,cx;ax=V 的低 16 位-(Z 的低 16 位+X*Y 的低 16 位-540)

sbb dx,bx;dx=V 的高 16 位-(Z 的高 16 位+X*Y 的高 16 位+低位进位-低位借位)-低

位借位

 

idiv X ;/X

〔解答〕

[V-(X*Y+Z-540)]/X

AX 存商,DX 存余数

 

〔习题 2.22〕判断下列程序段跳转的条件

(1) xor ax,1e1eh

je equal

(2)test al,10000001b

jnz there

(3)cmp cx,64h

jb there

〔解答〕

(1)AX=1e1eh(异或后为 0)

(2)AL 的 D0 或 D7 至少有一位为 1

(3)CX(无符号数)< 64h

 

〔习题 2.23〕设置 CX = 0,则 LOOP 指令将循环多少次?

例如:

mov cx,0

delay:

 loop delay

〔解答〕

216 次。

〔习题 2.25〕有一个首地址为 array 的 20 个字的数组,说明下列程序段的功能。

mov cx,20

mov ax,0

mov si,ax

sum_loop:

 add ax,array[si]

add si,2

loop sum_loop

mov total,ax

〔解答〕

将首地址为 array 得 20 个字的数组求和,并将结果存入 total 单元中。

 

〔习题 2.26〕按照下列要求,编写相应的程序段:

(1)起始地址为 string 的主存单元中存放有一个字符串(长度大于 6),把该字符串中的第

1 个和第 6 个字符(字节量)传送给 DX 寄存器。

(2)从主存 buffer 开始的 4 个字节中保存了 4 个非压缩 BCD 码,现按低(高)地址对低

(高)位的原则,将它们合并到 DX 中。

(3)编写一个程序段,在 DX 高 4 位全为 0 时,使 AX = 0;否则使 AX = -1。

(4)有两个 64 位数值,按“小端方式”存放在两个缓冲区 buffer1 和 buffer2 中,编写程序段

完成 buffer1

-buffer2 功能。

(5)假设从 B800h :

 0 开始存放有 100 个 16 位无符号数,编程求它们的和,并把 32 位的和

保存在 DX.AX 中。

(6)已知字符串 string 包含有 32KB 内容,将其中的’$’符号替换成空格。

(7)有一个 100 个字节元素的数组,其首地址为 array,将每个元素减 1(不考虑溢出)存

于原处。

(8)统计以 ’$’ 结尾的字符串 srting 的字符个数。

〔解答〕

(1)解答:

mov si,0

mov dl,string[si];第 1 个字符送 dl 寄存器:

mov dl,stirng[0]

mov si,5

mov dh,string[si];第 6 个字符送 dh 寄存器:

mov dl,stirng[5]

(2)解答:

xor si,si;si 清零

mov al,buffer[si];第一字节

inc si

mov ah,buffer[si];第二字节

mov cl,4

shl ah,cl;BCD 码移到高半字节

or al,ah;组合成压缩 BCD 码

mov dl,al;存入 dl 寄..

inc si

mov al,buffer[si];第三字节

inc si

mov ah,buffer[si];第四字节

mov cl,4

shl ah,cl;BCD 码移到高半字节

or al,ah;组合成压缩 BCD 码

mov dh,al;存入 dh 寄..

(3)解答:

test dx,0f000h; test dh,0f0h

jz next; jnz next

mov ax,-1; mov ax,0

jmp again

next:

 mov ax,0; mov ax,0ffffh

again:

...

(4)解答:

mov ax, word ptr buffer1

sub ax, word ptr buffer2;先减低 16 位

mov dx, word ptr buffer1+2

sbb dx, word ptr buffer2+2;后减高 16 位,需减低 16 位的借位

(5)解答:

mov ax,0b800h

mov ds,ax;段地址

xor si,si;地址偏移量 si=0

xor dx,dx;和的高字 dx=0

mov cx,99;加的次数

mov ax,[si];第一个数

again:

 inc si;指向下一个字单元

inc si

add ax,[si];加下一个数

jnc noc;无进位转

inc dx;有进位 dx=dx+1

noc:

 dec cx;次数-1

jnz cx,again;非 0 继续加

(6)解答 1:

不使用串操作指令(更好)

mov si,offset string

mov cx,8000h; 32k=2^15=8000h

 

again:

cmp byte ptr [si], ‘$’ ;‘$’ =24h

jnz next; 不要采用 jz 进行分支

 

mov byte ptr [si], ‘ ’ ;‘ ’=20h

next:

inc si

loop again; dec cx

; jnz again

(6)解答 2:

使用串操作指令

mov di,offset string

mov al,’$’

mov cx,8000h

cld

again:

scasb

jnz next

mov byte ptr es :

 [di-1], ‘ ’

 

next:

loop again

(7)解答 1:

mov si,offset array

mov cx,100

again:

dec byte ptr [si]

inc si

loop again

(7)解答 2:

xor si,si; si<--0

mov cx,100; 循环次数

again:

 dec array[si]

inc si

loop again

(7)解答 3:

mov si,offset array

mov di,si

mov ax,ds

mov es,ax

mov cx,100

cld

again:

 lodsb

dec al

stosb

loop again

(8)解答:

xor si,si;si<--0

coun:

cmp string[si],'$'

je done

inc si

jmp coun

done:

...

 

〔习题 4.9〕编制一个程序,把变量 bufX 和 bufY 中较大者存入 bufZ;若两者相等,则把其

中之一存入 bufZ 中。

假设变量存放的是 8 位无符号数。

〔解答〕

.model small

.stack 256

.data

bufxdb ?

bufYdb ?

bufzdb ?

.code

.startup

mov al, bufX

mov bl, bufY

cmp al,bl

ja next

mov bufZ, bl

jmp done

next:

 mov bufZ, al

done:

.exit 0

end

 

〔习题 4.10〕设变量 bufX 为有符号 16 位数,请将它的符号状态保存在 signX,即:

如果 X

大于等于 0,保存 0

;如果 X 小于 0,保存-1(ffh)。

编写该程序。

〔解答〕

.model small

.stack

.data

bufXdw -7

signXdb ?

.code

.startup

cmp bufX,0;test bufX,80h

jl next;jnz next

mov signX,0

jmp done

next:

mov signX,-1

done:

.exit 0

end

 

〔习题 4.11〕bufX、bufY 和 bufZ 是 3 个有符号 16 进制数,编写一个比较相等关系的程序:

(1)如果这 3 个数都不相等,则显示 0;

(2)如果这 3 个数中有两个数相等,则显示 1;

(3)如果这 3 个数都相等,则显示 2。

〔解答〕

.model small

.stack 256

.data

bufxdw ?

bufYdw ?

bufzdw ?

.code

.startup

mov ax, bufX

mov bx, bufY

mov cx, bufZ

mov dl, '0'

cmp ax,bx

jnz next1

inc dl

next1:

cmp ax,cx

jnz next2

inc dl

next2:

cmp bx,cx

jnz next3

inc dl

next3:

cmp dl,’3’

jb next4

mov dl,’2’

next4:

mov ah,02h;显示

int 21h

.exit 0

end

 

1.什么是 8088 中的逻辑地址和物理地址?

逻辑地址如何转换成物理地址?

1MB 最多能分成

多少个逻辑段?

请将如下逻辑地址用物理地址表达:

⑴ FFFFH:

0⑵ 40H:

17H ⑶ 2000H:

4500H ⑷ B821H:

4567H

〔解答〕

⏹物理地址:

物理存储单元具有的一个唯一的 20 位编号

⏹逻辑地址:

在 8088 内部和用户编程时,所采用的“段地址:

偏移地址”形式

⏹将逻辑地址中的段地址左移二进制 4 位(对应 16 进制是一位,即乘以 16),加上偏

移地址就得到 20 位物理地址

⏹1MB 最多能分成 1MB÷16B=220÷24=216 个逻辑段,因为每隔 16 个字节单元就可以

开始一个逻辑段

⑴ FFFFH:

0=FFFF0H

⑵ 40H:

17H=00417H

⑶ 2000H:

4500H=24500H

⑷ B821H:

4567H=BC777H

 

〔习题 2.6〕

8088 有哪 4 种逻辑段,各种逻辑段分别是什么用途?

〔解答〕

•代码段(Code Segment)用来存放程序的指令序列。

处理器利用 CS :

 IP 取得下一条要

执行的指令

•堆栈段(Stack Segment)确定堆栈所在的主存区域。

处理器利用 SS :

 SP 操作堆栈中的

数据

•数据段(Data Segment)存放当前运行程序所用的数据。

处理器利用 DS :

 EA 存取数据

段中的数据

•附加段(Extra Segment)是附加的数据段,也用于数据的保存。

处理器利用 ES :

 EA 存

取数据段中的数据

 

〔习题 2.8〕

已知 DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放 12H、

34H、56H、78H,[21200H]~[21203H]依次存放 2AH、4CH、B7H、65H,说明下列每条指令

执行完后 AX 寄存器的内容,以及源操作数的寻址方式?

⑴ mov ax,1200h

⑵ mov ax,bx

⑶ mov ax,[1200h]

⑷ mov ax,[bx]

⑸ mov ax,[bx+1100h]

⑹ mov ax,[bx+si]

⑺ mov ax,[bx][si+1100h]

〔解答〕

⑴ mov ax,1200h;AX=1200H,立即数寻址

⑵ mov ax,bx ;AX=0100H,寄存器寻址

⑶ mov ax,[1200h];AX=4C2AH,直接寻址

⑷ mov ax,[bx];AX=3412H,寄存器间接寻址

⑸ mov ax,[bx+1100h] ;AX=4C2AH,寄存器相对寻址

⑹ mov ax,[bx+si] ;AX=7856H,基址变址寻址

⑺ mov ax,[bx][si+1100h];AX=65B7H,相对基址变址寻址

 

〔习题 2.9〕

说明下面各条指令的具体错误原因

⑴ mov cx,dl ⑵ mov ip,ax

⑶ mov es,1234h ⑷ mov es,ds

⑸ mov al,300⑹ mov [sp],ax

⑺ mov ax,bx+di⑻ mov 20h,ah

〔解答〕

 

〔习题 2.11〕

给出下列各条指令执行后 AL 值,以及 CF、ZF、SF、OF 和 PF 的状态:

mov al,89h

add al,al

add al,9dh

cmp al,0bch

sub al,al

dec al

inc al

〔解答〕

mov al,89h;AL=89HCF ZFSFOF PF

add al,al;AL=12H10011

add al,9dh;AL=0AFH00101

cmp al,0bch;AL=0AFH 10101

sub al,al;AL=00H01001

dec al;AL=0FFH00101

inc al;AL=00H01001

〔习题 2.12〕

请分别用一条汇编语言指令完成如下功能:

⑴ 把 BX 寄存器和 DX 寄存器的内容相加,结果存入 DX 寄存器。

⑵ 用寄存器 BX 和 SI 的基址变址寻址方式把存储器的一个字节与 AL 寄存器的内容相加,

并把结果送到 AL 中。

⑶ 用 BX 和位移量 0B2H 的寄存器相对寻址方式把存储器中的一个字和 CX 寄存器的内

容相加,并把结果送回存储器中。

⑷ 用位移量为 0520H 的直接寻址方式把存储器中的一个字与数 3412H 相加,并把结果

送回该存储单元中。

⑸ 把数 0A0H 与 AL 寄存器的内容相加,并把结果送回 AL 中

〔解答〕

⑴ 把 BX 寄存器和 DX 寄存器的内容相加,结果存入 DX 寄存器

add dx,bx

⑵ 用寄存器 BX 和 SI 的基址变址寻址方式把存储器的一个字节与 AL 寄存器的内容相加,

并把结果送到 AL 中

add al,[bx+si]

⑶ 用 BX 和位移量 0B2H 的寄存器相对寻址方式把存储器中的一个字和 CX 寄存器的内

容相加,并把结果送回存储器中

add [bx+0b2h],cx

⑷ 用位移量为 0520H 的直接寻址方式把存储器中的一个字与数 3412H 相加,并把结果

送回该存储单元中

add word ptr [0520h],3412h

⑸ 把数 0A0H 与 AL 寄存器的内容相加,并把结果送回 AL 中

add al,0a0h

〔习题 2.13〕

设 X、Y、Z、V 均为 16 位带符号数,分别装在 X、Y、Z、V 存储单元中,阅读如下程序

段,得出它的运算公式,并说明运算结果存于何处。

mov ax,X

imul Y

mov cx,ax

mox bx,dx

mov ax,Z

cwd

add cx,ax

adc bx,dx

sub cx,540

sbb bx,0

mov ax,V

cwd

sub ax,cx

sbb dx,bx

idiv X

〔解答〕

〔习题 2.14〕

给出下列各条指令执行后的结果,以及状态标志 CF、OF、SF、ZF、PF 的状态。

mov ax,1470h

and ax,ax

or ax,ax

xor ax,ax

not ax

test ax,0f0f0h

〔解答〕

mov ax,1470h;AX=1470H CF ZFSFOF PF

and ax,ax; AX=1470H 00000

or ax,ax;AX=1470H 00000

xor ax,ax;AX=0000H 01001

not ax;AX=FFFFH 01001

test ax,0f0f0h;AX=FFFFH 00101

〔习题 2.17〕

判断下列程序段跳转的条件

⑴  xor ax,1e1eh

je equal

⑵  test al,10000001b

jnz there

⑶  cmp cx,64h

jb there

〔解答〕

⑴xor ax,1e1eh

je equal;AX=1e1eh(异或后为 0)

⑵test al,10000001b

jnz there ;AL 的 D0 或 D7 至少有一位为 1

⑶cmp cx,64h

jb there;CX(无符号数)< 64h

〔习题 2.19〕

有一个首地址为 array 的 20 个字的数组,说明下列程序段的功能。

mov cx,20

mov ax,0

mov si,ax

sumlp:

add ax,array[si]

add si,2

loop sumlp

mov total,ax

〔解答〕

 

〔习题 2.20〕

按照下列要求,编写相应的程序段:

⑴ 由 string 指示起始地址的主存单元中存放有一个字符串(长度大于 6),把该字符

串中的第 1 个和第 6 个字符(字节量)传送给 DX 寄存器。

⑵ 有两个 32 位数值,按“小端方式”存放在两个缓冲区 bu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1