期中复习提纲.docx
- 文档编号:29970113
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:25
- 大小:23.63KB
期中复习提纲.docx
《期中复习提纲.docx》由会员分享,可在线阅读,更多相关《期中复习提纲.docx(25页珍藏版)》请在冰豆网上搜索。
期中复习提纲
〔习题 1.19〕什么是 8086 中的逻辑地址和物理地址?
逻辑地址如何转换成物理地址?
请将
如下逻辑地址用物
理地址表达:
(1)FFFFh:
0
(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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 期中 复习 提纲
![提示](https://static.bdocx.com/images/bang_tan.gif)