admin 管理员组

文章数量: 1086019


2024年1月25日发(作者:嵌入式硬件工程师待遇)

第1章 自测练习

一、选择题(四选一)

1. 某个加法运算结果使标志ZF=1,则标志SF为

A

A 0 B 1 C 不改变原来的状态 D 不确定

2. 可以为存储器操作数提供偏移地址的寄存器组是

B 。

A AX、BX、CX、DX B BX、BP、SI、DI

C SP、IP、BP、DX D CS、DS、ES、SS

3. 8086/8088确定下一条执行指令物理地址的计算表达式为 D 。

A DS× 16+EA B ES× 16+EA

C SS×l6+SP D CS×l6+IP

4. 某系列微机对存储器分段,如果每个段最多的字存储单元(16位二进制)是32K,那么表示段内字节单元偏移地址的二进制位数应是 C 位。

A 14 B 15 C 16 D 20

5. 十进制数-100的8位二进制数的补码为 D 。

A 10011011 B 01100100 C 10011101 D 10011100

6. 下列各个8位二进制数的补码中,绝对值最大的是 A 。

A 10001000 B 11111110 C 00000100 D 00000001

7. 16位有符号数的补码所表示的十进制数的范围是 B 。

A -32767~+32768 B -32768~+32767

C -65535~+65536 D 0~65535

8. 对数值83A7H作逻辑非运算后的结果是 D 。

A 83A8H B、73A8H C、7C59H D、7C58H

9. 指令“mov cx,[bp+16]”的源操作数采用的段寄存器是 B 。

A CS B SS C DS D ES

10. 指向程序堆栈区的段寄存器是 B 。

A CS B SS C DS D ES

11. 有效地址是指 C 。

A 存储器操作数的物理地址 B 存储器操作数的段地址

C 存储器操作数的偏移地址 D 立即数的偏移地址

12. 寄存器间接寻址方式中,操作数在 C 中。

A 通用寄存器 B 段寄存器

C 主存单元 D 堆栈

13. 指令“mov ax,es:[bx][si]”源操作数的物理地址是 D 。

A 16×CS+BX+SI B 16×SS+BX+SI

C 16×DS+BX+SI D 16×ES+BX+S1

14. 算术运算类指令的寻址和转移类指令的寻址,两者的不同之处是 A 。

A 前者存取操作数,后者决定程序跳转的目的地址

B 后者存取操作数,前者决定程序跳转的目的地址

C 两者都是存取操作数

D 两者都决定程序跳转的目的地址

二、填空题

1. 8086/8088 CPU有4种逻辑段,可执行指令代码通常应该存放在代码段CS 段。

1

2. 存储器中,数据是以 字节 为单位存放的,它是一个 8 位二进制数。

3. 在表达存储容量时,1KB= 1024 B;1MB= 1024 KB.

4. 16位二进制数被称为一个 字(word) ;存放时要将 低 字节放在地址较小的存储单元中。

5. 机器指令分成 操作码 和 操作数 两个字段。

6. 某存储单元的逻辑地址为3A80:13EBH,其中的3A80H是 段 地址,13EBH是

偏移 地址;该存储单元的物理地址是 3BBEBH ,若第一个地址改变为30D4H,则该存储单元的第二个地址为 0AEABH 。

7. 微型计算机一般都采用总线结构,系统总线的信号线有三组,即 数据 总线、地址总线和 控制 总线。

8. 在堆栈结构中,其数据的操作原则是 先进后出 。

9. 在标志寄存器中,第11位(OF)的作用是 判断有符号数是否溢出 ,第6位(ZF)的作用是 判断结果是否为零 。

10. 当两个无符号数相减(加)产生借位(进位)时,标志CF= 1 。

11. 8088/8086具有20条地址线,所以其主存容量可达 1MB 。

12. 现有一个二进制数10110101,若将该数看作是无符号数,原码、反码和补码表示的有符号数,则对应的真值分别是 181 、 -53 、 -74 和

-75 。

13. 已知有一个物理地址34567H,可以采用的逻辑地址有 3000 H:4567H、

3450H: 0067 H等。

三、问答题

1. 简述汇编语言相对高级语言的优点。

答:汇编语言程序便于直接控制硬件,用汇编语言产生的可执行程序容量小、执行速度快、效率高。

2. 8086有哪4种逻辑段,各种逻辑段分别是什么用途。

代码段:存放程序的指令序列

堆栈段:确定堆栈所在的主存储区域。

数据段:存放程序使用的数据。

附加段:同数据段一样也用于存放程序使用的数据。

3. 对存储器操作数的段地址的默认规定是什么?

除以BP寄存器访问主存默认采用堆栈段SS外,其他存储器操作数默认采用数据段DS作为段地址。

4. 有效地址EA是指什么?

有效地址EA是指存储器操作数的偏移地址。

5. 什么是逻辑地址和物理地址,如何由逻辑地址求得对应的物理地址?

逻辑地址:8086/8088CPU内部和程序设计时,以两个16位的“段地址:偏移地址”形式表达主存单元,这种地址表达形式就是逻辑地址。

物理地址:8086/8088CPU外部寻址主存时使用的20位地址。

逻辑地址的段地址左移4位加偏移地址就是20位物理地址。

2

6. 写出下列逻辑地址(十六进制形式)的段地址、偏移地址和物理地址

① 2314:0024 段地址为2314H、偏移地址为0024H,物理地址为23164H

② 1FD0:001A 段地址为1FD0H、偏移地址为001AH,物理地址为1FD1AH

7. 写出下列指令的源操作数采用的寻址方式?如果可以计算,其物理地址是多少?假设DS=3000H、ES=3100H、SS=2000H、SI=00ABH、BX=0200H、BP=0020H,变量var的偏移地址为0080H。

① mov ax,var

直接寻址,物理地址=3000H*16+0080H=30080H

② mov ax,[bx]

寄存器间接寻址,物理地址=3000H*16+0200H=30200H

③ mov ax,var[bx]

寄存器相对寻址,物理地址=3000H*16+0200H+0080H=30280H

④ mov ax,[200h]

直接寻址,物理地址=3000H*16+0200H=30200H

⑤ mov ax,0

立即寻址,操作数在代码段中。

⑥ mov ax,si

寄存器寻址,操作数在寄存器SI中,为00ABH。

⑦ mov ax,es:[bx]

寄存器间接寻址,物理地址=3100H*16+0200H=31200H

⑧ mov ax,ds:[bp+2]

寄存器相对寻址,物理地址=3000H*16+0020H+0002H=30022H

⑨ mov ax,var[bx][si]

相对基址变址寻址,物理地址=3000H*16+0200H+000ABH+0080H=3032BH

第2章 自测练习

一、选择题(四选一)

1. 下列指令中,属于非法指令的是 D 。

A mov [si],al B push [si]

C jmp bx D in ah,dx

2. 下列指令中,有语法错误的是 A 。

A mov [si],[di] B and ax,cx

C jmp word ptr[bx] D idiv bx

3. 下列 A 指令不合法。

A in ax,278h B rcr dx,cl

3

C cmpsb D ret 4

4. 执行如下指令“mov sp,4320h”和“push bx”之后,SP寄存器的值是 C 。

A 4321H B 4322H C 431EH D 431FH

5. 假设SS=2000H、SP=0100H、AX=2021H,执行指令PUSH AX,存放数据21H的堆栈区的物理地址是 C 。

A 20102H B 20101H C 200FEH D 200FFH

6. 将寄存器AX的内容乘以2的正确指令序列是 B 。

A shr ax,1 B shl ax,1 C ror ax,1 D rcr ax,1

7. 执行DEC指令不影响的标志位是 D 。

A SF B PF C OF D CF

8. 执行除法指令后,影响的标志位是 A 。

A 所有状态标志都不确定 B CF、OF

C SF、ZF D AF、PF

9. 编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令是 D 。

A CMP B SUB C AND D MOV

10. 为使CX=-1,执行“jz minus”转至标号minus而编制了一指令,其中错误的是

C 。

A inc cx B sub cx,0ffffh

C and cx,0ffffh D xor cx,0ffffh

11. 当一个带符号数大于0FBH时程序转移,在“cmp al,0fbh”指令后,需选用的条件转移指令是 C 。

A JLE B JNL C JNLE D JL

12. 测试BL寄存器内容是否与数据4FH相等,若相等则转NEXT处执行,那么在“JZ

NEXT”指令前的一个指令应是 B 。

A test bl,4fh B xor bl,4fh

C and bl,4fh D or bl,4fh

13. 循环指令LOOPNZ继续循环的条件是 C 。

A CX=0,且ZF=0 B CX=0,或ZF=1

C CX≠0,且ZF=0 D CX≠0,或ZF=1

14. CBW指令的功能是 B 。

A 把源操作数的符号位扩展到目的操作数中

B 把AL中的符号位扩展到AH中

C 把AH中的符号位扩展到AL中

D 把AX中的符号位扩展到DX中

15. 下列4条指令mul bx、div bl、in ax,20h、out 21h,al中,有 A 条指令需要使用DX寄存器。

A 1 B 2 C 3 D 4

16. 设AX=0012H、BX=0034H,那么下述程序段

mov cl,8

rol ax,cl

or ax,bx

执行后,AX= A 。

A 1234H B 3412H C 0046H D 0034H

4

17. 执行下列指令序列

mov al,81h

add al,al

adc al,al

后,AL= B 。

A 04H B 05H C 204H D 205H

18. 假定DS=4000H、DI=0100H、[40100H]=55H、[40101H]=AAH,那么执行指令“lea

bx,[di]”后,BX= C 。

A AA55H B 55AAH C 0100H D 4100H

19. 设AL=20H、SI=0500H、DS=3000H、[30500H]=0C0H、CF=1。执行“SBB AL,[SI]”指令后,正确的结果是 C 。

A AL=5FH、SF=1、CF=1 B AL=60H、SF=1、CF=0

C AL=5FH、SF=0、CF=1 D AL=60H,SF=0、CF=0

二、填空题

1. 指令SAR可用来对 有符号 数除以2,而指令SHR可用来对 无符号 数除以2。MUL BX指令的结果存在 DX 和 AX 寄存器中,等效于loop指令的两条指令依次是 DEC CX 和 JNZ 。

2. 已知SI=1000H,AX=ABCDH、SP=0100H、BP=00FEH,给出下列指令顺序执行后,指定寄存器中的内容.

push ax ;AX= ABCDH 、SP= 00FEH

push si ;SI= 1000H 、SP= 00FCH

pop ax ;AX= 1000H 、SP= 00FEH

push bp ;BP= 00FEH 、SP= 00FCH

pop si ;SI= 00FEH 、SP= 00FEH

pop bp ;BP= ABCDH SP= 0100H

push ax ;AX= 1000H 、SP= 00FEH

pop bx ;BX= 1000H 、SP= 0100H

3. 设DS=2000H、BX=1256H,变量table的偏移地址为20A1H,[232F7H]=3280H。请问下列指令分别执行后,IP的值各是多少?

① jmp bx ;IP= 1256H

② jmp table [bx] ;IP= 3280H

三、问答题

1. 试述mov ax,bx和mov ax,[bx]两条语句的异同点?

相同:实现将数据传送到AX寄存器。

不同:两者的源操作数不同。前者来自BX本身,后者来自BX指向的存储单元。

2. 请指出如下各条指令的错误原因,并按照原意修改正确:

① mov [di],8000h

没有明确是字操作,改为:mov word ptr [di],8000h

②rcl ax,bl

移位指令只能采用CL寄存器指明移位位数,正确为:rcl ax,cl

5

③add bx+si,cx

目的操作数采用基址变址寻址方式,需要使用方括号。正确为:add [bx+si],cx

④mov [bx]si,ax

目的操作数采用基址变址寻址方式,需要使用方括号将寄存器都扩进去。正确为:

add [bx][si],cx (或者为add [bx+si],cx)

3. 什么是堆栈,它的基本操作有哪两个,对应哪两种指令?

堆栈是一种按“先进后出”原则存取数据的存储区域。

堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。

4. 试述“cmp ax,bx”和“sub ax,bx”两条语句的异同点?

相同:都执行AX-BX操作,影响所有标志位且对标志位的影响相同。

不同:CMP指令执行后AX和BX 内容不改变;而SUB指令执行后,AX内容为AX-BX之差,即内容变化了。

5. 不管是段内返回还是段间返回,子程序均用RET指令.试回答:

①执行段内返回RET指令时,执行的操作是什么?

栈顶一个字的内容送指令指针,IP ←SS:SP, SP←SP+2

②执行段间返回RET指令时,执行的操作是什么?

栈顶一个双字的内容送指令指针和代码寄存器,IP ←SS:SP, SP←SP+2;CS ←SS:SP,

SP←SP+2;

6. 什么是短转移(short)、近转移(near)和远转移(far)?什么是段内转移和段间转移?8086有哪些指令可以实现段间转移?

短转移:段内-128~127之间的转移,位移量用一个字节表示。

近转移:段内±32K之间的转移,位移量用一个字表示。

远转移:段间1MB范围的转移。

段内转移:在同一个代码段内的转移,可以是短转移或者近转移。

段间转移:转移到另一个代码段,就是远转移。

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

① xor ax,1e1eh

je equal

AX=1e1eh

② test al,10000001b

jnz there

AL中D0和D7至少有一位为1

③ cmp cx,64h

jb there

CX内无符号数小于64h

五、程序设计题

6

1. 请分别用一条指令完成如下要求:

①将立即数80H送到地址为num的存储单元中;

mov byte ptr num,80H

②将地址为array的存储单元中的字数据循环右移一位;

ror word ptr array,1

③测试地址为BUFFER的字数据的符号位;

test word ptr buffer,8000h

④将首地址为array的字数组中第5个数据送往寄存器BX中;

mov bx , array[8]

⑤将AX的内容,减去0520H,并减去上次运算的借位。

Sbb ax,0520h

2. 按下列要求分别写出一条指令:

①AX寄存器的低4位清0;

and ax, 0fff0h

②BX寄存器的低4位置1;

or bx , 000fh

③CX寄存器的低4位取反;

xor cx, 000fh

④测试DL寄存器的第3位和第5位是否同时为0;

test dl, 00101000b

⑤如果AL是数字0~9的ASCII码,则将它转换为对应的非压缩BCD码;如果AL是数字0~9的非压缩BCD码,则将它转换为对应的ASCII码。即用一条指令实现数字0~9的ASCII码与非压缩BCD码的相互转换。

Xor al,30h

数字0~9的ASCII码是30H~39H,而对应的非压缩BCD码是00h~09h,两者只是D5D4相反。所以用XOR指令实现求反,完成互相转换。

3. 请分别用一个程序段完成如下要求:

①将一个字节数据FDH输出到端口21H;

mov al , 0fdh

out 21h , al

②将AL中的两位BCD码分离,分别存放DL和DH中;

mov dl, al

and dl,0fh

7

mov dh ,al

mov cl,4

shr dh ,cl

③将AL中的8位有符号数转换成它的绝对值;

and al,0ffh

jns done ; 如果是正数,则无需转换

neg al ; 如果是负数,则求补

done : ……..

④将DX、AX寄存器中的32位数实现算术右移一位;

sar dx,1 ;如果是逻辑右移,应使用指令“shr dx,1”

rcr ax,1 ;不能采用指令“ror ax,1”

4. 按照如下各题要求,分别编写一个程序段。

①把变量bufX和bufY中较大者存入bufZ;若两者相等,则把其中之一存入bufZ中。假设变量存放的是8位无符号数.

mov al, bufX

cmp al,bufY

jae goon

mov al, bufY

goon: mov bufZ, al

②统计以“$”结尾的字符串string的字符个数.

mov ax ,0

mov bx, offset string

again: cmp [bx],byte ptr ‘$’

jz done

inc ax

inc bx

jmp again

done:…… ;字符个数存放在AX寄存器

8


本文标签: 指令 地址 寄存器 执行