第一章
·1个CPU的寻址能力为8KB,那么它的地质纵线的宽度为(13) 解析:如果地址总线宽度为N,那么它的寻址能力为2^n byte。 根据此题可列方程 2^n=8KB=8*1024 byte 算出n=13 注意:一个存储(内存)单元存储1byte数据 或8bit大小的数据 -->1byte=8bit
·1KB的存储器有1024个存储单元。存储单元的编号从()到() 解析:0-1023
·1KB的存储器可以存储()个bit,()个byte。 解析:1KB=1024Byte=1024*8bit
·1GB、1MB、1KB分别是()、()、()Byte 解析:1TB=1024GB 1GB=1024MB 1MB=1024KB 1KB=1024Byte 1Byte=8bit
·8080、8088、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根则他们一次可以传送的数据为1B、1B、2B、2B、4B 解析:如一根数据总线可以传输一个0或1,即1bit,8根数据总线则可以传输8个0或1,即8bit.刚好1B·
·从内存中读取1024字节的数据,8086至少要读(512)次,80836至少要读(256)次 解析:8086的数据总线宽度为16根,一次读取2B的数据 一共1024B的数据,所以 至少读1024/2=512次。80836的地址总线宽度为32根,一次读取4B的数据,所以1024/4=256
·在存储器中,数据和程序以(二进制码)存放
·一个CPU访问的最大内存地址是1023,地址总线宽度(10) 解析:如果地址总线宽度为N,那么它的寻址能力为2^n byte。
·一个CPU读取1024字节的数据至少读取了512次,数据总线的宽度(16)
关于总线的说法错误的是D A:地址总线宽度决定了CPU的寻址能力 B数据总线的宽度决定了CPU与外界进行数据传送时的一次数据传送量 C控制总线的宽度决定了CPU对系统中其它器件的控制能力 D总线就是负责CPU内部信息传送的一系列导线
第二章
·000:0 mov ax,8
1000:3 jmp ax
1000:5 mov ax,0
1000:8 mov bx,ax
1000:a jmp bx
CPU从1000:0处开始执行指令当执行完1000:a处的指令后几次修改IP(6)次 解析:简单记法碰到jmp IP变两次
·
下列关于8086CPU的工作原理的描述错误的是(C)
A
汇编程序员可以通过对各种寄存器中内容的修改实现对CPU的控制。
B
CPU在访问内存时,采用“段地址*16+偏移地址”的形式给出要访问的内存单元的物理地址。
C
任意时刻,CS:IP指向的内容即是此刻CPU正在执行的指令。
D
传送指令能够更改所有通用寄存器的内容。
解析:CPU的工作过程: 1、从CS:指向的内存单元读取指令,读取的指令进入指令缓冲器; 2、IP指向下一条指令; 3、执行指令。(转到步骤1重复这个过程)
简单记法: CPU工作过程: 读、IP变、执行
·16位结构的CPU不一定具备的特征是( )
A
运算器一次最多处理16位的数据。
B
寄存器的最大宽度为16位。
C
寄存器和运算器之间的通路为16位。
D
地址总线为16根。
解析:8086CPU为16位CPU,地址总线为20根。
在DEBUG中,(A )选项中的命令可以修改内存单元的内容
A、A
B、D
C、T
D、U
下列说法中正确的是( D)
A
一条指令被执行后,IP的值进行改变。
B
当CPU执行完当前指令返回debug后CPU就闲下来不再进行工作。
C
E命令可将所有内存单元中的数据进行改变。
D
CPU将CS:IP所指向的内存单元中的数据当做指令来执行
解析:
B选项当CPU执行完当前指令后,继续执行CS:IP所指向的下一条指令。 C选项ROM中的内容不可改变。
下列说法中正确的是( D )
A
8086CPU采用“段地址*16+偏移地址=物理地址”的寻址模式,所以内存是有一个一个的段组成,每一个段有一个段地址。
B
物理地址为FFFF0H的内存单元的偏移地址可能为FFFFH。
C
一个段的大小可以是8Byte。
D
在一段没有任何跳转指令的程序中,超出64K的部分将不会被执行。
解析: A选项:内存不是由段组成的,段的划分是有CPU来确定的。 B选项:如果物理地址为FFFF0H,偏移地址为FFFFH,则段地址为EFFF1H,但EFFF1H不是合法的段地址,所以该物理地址的偏移地址不能为FFFFH。 C选项:每个段的起始地址必须为16的整数倍,所以一个段最小为16B。
下面哪个是错误的指令(D )
A
mov ax,bx
B
add al,0f5h
C
mov al,bh
D
add al,100h
解析:AL为8位寄存器,不能将高于8位的数据放入8位寄存器内。
给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为(0010H)到(1000FH)
·有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为(1001H),最大为(2000H)
第三章
·
1.能够只将al中的内容压入栈的指令序列是(C)。
A
push al
B
pop ax
C
mov ah,0
push ax
D
mov ax,0
push ax
下列说法正确的是:(D)
A
数据段和代码段的段地址不能相同。
B
指令mov ax,bx执行完后bx中的值为零。
C
一个栈段的大小可以设为任意值。
D
当SP=0时,再次压栈将发生栈顶超界,但压栈操作有效
下列指令的书写正确的是:(C)
A
push al
B
mov cs:[0],ds:[10]
C
pop si
D
mov ds:[0],2
解析:C:SI和DI是8086CPU中和bx功能相近的寄存器 D:不知道2是八位还是十六位的 B:不能把一个寄存器的值直接赋值给另一个寄存器
若将以1000H为段地址的整个段空间当作栈使用,那么寄存器SP的初始值最合理的设置是(A)。
A
0000H
B
0001H
C
FFFFH
D
FFFEH
解析:0000 吧。整个段用作堆栈,那首次压栈的就是保存在 FFFE 了:压栈操作是 sp 减 2 ,数据保存到 [sp] 处,初始则是
FFFE+2 为 10000,偏址只有 4个十六进制位,于是就是 0000了,看着就是地址回绕了。
在8086CPU系统中一个栈段的容量最大为(C)。
A
1KB
B
512KB
C
64KB
D
32GB
解析:栈段容量最大为10000B,10000换成10进制,1*16^4=65536B 65536B/1024=64KB
16进制转换成10进制
比如:125是16进制
化成10进制
=1*16^2+2*16^1+5*16^0
=256+32+5
=293
一个地址单元中存放的字节型数据是(1B)
一个地址单元中存放的字型数据是(2B)
写几条指令可以把AL中的数据存入内存单元10000H中
MOV BX,1000
MOV DS,B X
MOV [0],AL
问题3.5 主要要把10进制转换为16进制 除以16取余倒排
监测点3.1第二题答案
清零操作:将AX数据清零 sub ax,ax
问题3.10
监测点3.2
第四章
问题4.2 背诵 可打小抄
第五章
要计算123与456的乘积,应填在空白处的指令序列是(D )。
assume cs:code
code segment
____________
mov ax,4c00h
int 21h
code ends
end
A
mov ax,1
mov cx,123
s: add ax,123
loop s
B
mov ax,0
mov cx,456
s: add ax,456
loop s
C
mov ax,1
mov cx,456
s: add ax,123
loop s
D
mov ax,0
mov cx,456
s: add ax,123
loop s
对于如下程序:
assume cs:code
code segment
start:mov ax,code
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
下列说法正确的是(C)。
A
指令mov ax,code改为mov ax,start对程序要 实现的功能没有任何影响。
B
程序不能通过编译,因为在loop指令之前,没有对寄存器cx进行设定。
C
程序实现的功能是将程序的所有指令复制到内存中以0:200h为起始地址的一段内存空间中。
D
程序实现的功能是用内存中以0:200h为起始地址的一段内存空间中的数据将程序的所有指令覆盖。
已知21000h处字单元的内容为 BE00H,对于如下程序:
5e967af181971.png?OSSAccessKeyId=LTAItfPkNIKJFibY&Expires=4740520177&Signature=7j6jZjvM%2B%2FFIy4bYcIKGb6qlxSo%3D
程序执行后,内存中字单元2000:1005中的内容为(D)。
A
00
B
BE
C
00BE
D
0000
mov cx,5
s: mov ax,[bx]
add bx,2
loop s
上面指令序列,当指令第一次执行到add bx,2时cx的值(A)。
A
5
B
4
C
3
D
2
解析:碰到LOOP指令CX减1,并判断CX是否小于等于0,若是则结束循环
在Intel8086环境下,对指令mov ax,[bx]描述错误的是(D)。
A
指令中,源操作数的段地址默认为ds中的内容
B
指令中,源操作数的偏移地址为bx中的内容
C
指令执行后,(al)=((ds)*16+(bx)),(ah)=((ds)*16+(bx)+1)
D
指令执行后,((ds)*16+(bx))=(al),((ds)*16+(bx)+1)=(ah)
第六章
仔细看监测点6.1
在Intel8086环境下,下列说法合理的是(C )。
A
汇编语言程序载入内存后处于64K空间以外的数据和指令将无法使用和执行。
B
一个数据段命名为data,此标号代表这个数据段在内存中的起始地址。
C
如果载入的程序没有返回语句,那么当程序代码执行完毕,将继续读取后续内存空间存储的指令到CPU内部作为指令执行下去,直到遇到返回指令为止。
D
用DW和DD定义进行的数据,只能够以字为单位访问。
在某程序中,定义了262B的数据段data,那么程序载入内存,该段实际占用的内存空间是(C)B。
A
256
B
262
C
272
D
512
解析:程序载入内存实际占用的空间必须是16的倍数 A和C是16的倍数,但是A小于262所以选C
上面代码执行s3处的指令之前,ax的值是(B)。
A
9
B
6
C
5
D
2
解析 END S 所以程序从S处开始执行
5e967c8092ca5.png?OSSAccessKeyId=LTAItfPkNIKJFibY&Expires=4740520576&Signature=HpYc4hzCJVtrdijRwWk3FRJl4gI%3D
要实现一次用内存0:0--0:15单元中的数据改写程序中定义的数据,添加到空白处的指令序列不能是(A)。
A
mov cs:[bx],ds:[bx]
B
mov dx,[bx]
mov cs:[bx],dx
C
push [bx]
pop cs:[bx]
D
mov ax,[bx]
mov cs:[bx],ax
解析:A不能这么赋值
某程序有数据段、栈段和代码段三部分,如果加载后代码段的段地址为X,那么下列说法正确的是(D)。
A
可以断定数据段的段地址是X-2。
B
可以断定栈段的段地址是X-1。
C
可以断定程序PSP区的段地址是X-10。
D
确定数据段和栈段的段地址与X的关系,要视其大小和在其在源程序中定义的位置关系。
第七章
生成EXE之后用Debug加载后,查看寄存器内容如下: ds=0b2d es=0b2d ss=0b3d cs=0b3e ip=0000 程序的起始地址的段地址是_C_。
A
0b3e
B
0b2d
C
0b3d
D
0
解析:详见课本P91页,PSP段的段地址为SA,,可用段地址为SA+10,即程序的起始地址的段地址=ds+10h
下列指令不能执行的是_c_。
A
mov ax,10h[bx]
B
mov ax,10h[di]
C
mov ax,[di+si]
D
mov ax,10h[bx][si]
解析:
详见课本P134,SI和DI是8086CPU中功能详见的寄存器,SI和DI不能分成两个8位寄存器来使用。
对如下程序要实现将datasg段中的字符串"welcome to masm!"复制到它后续的数据区中,
5e967d8418342.png?OSSAccessKeyId=LTAItfPkNIKJFibY&Expires=4740520836&Signature=36B5pntGuraJqruqNALgMMf2yTE%3D
在空白区域添加的指令序列合理的是_D_。
A
5e967dda88b30.png?OSSAccessKeyId=LTAItfPkNIKJFibY&Expires=4740520922&Signature=AT5ikjUx31GHkaw1IjQd0Hvhu2o%3D
B
5e967dff3e3ae.png?OSSAccessKeyId=LTAItfPkNIKJFibY&Expires=4740520959&Signature=neFFlX28CKIrZIbuLIkAWAOUrso%3D
C
5e967e1a9c39b.png?OSSAccessKeyId=LTAItfPkNIKJFibY&Expires=4740520986&Signature=2DVbsCsK%2BlptBC34TPp4ekraDnw%3D
D
5e967e3cd59f1.png?OSSAccessKeyId=LTAItfPkNIKJFibY&Expires=4740521020&Signature=nn2bo7OMi%2FV5oC5v9W8ntY%2FiMp8%3D
第八章
课本P161 8.1
问题8.1
下列指令序列不能够实现把内存地址0:202h中的字节数据送入al功能的是__C_。
A
mov ax,0
mov ds,ax
mov bx,202h
mov al,[bx]
B
mov ax,0
mov ds,ax
mov bx,200h
mov al,[bx+2]
C
mov ax,0
mov ds,ax
mov bp,202h
mov al,[bp]
D
mov ax,0
mov ds,ax
mov bp,200h
mov al,ds:[bp+2]
解析:[ ]里出现BP 段地址默认是SS
下列指令不合理的是__C。
A
mov ds:[0ffh],al
B
mov ds:[0ffh],ax
C
mov ds:[0ffh],0ffh
D
push ds:[0ffh]
解析:不能直接赋值,要通过寄存器间接赋值
mov dx,0
mov ax,1001
mov bx,100
div bl
以上四条指令执行完后,ah值是_A_。
A
1
B
10
C
1001
D
0
P164各种寻址方式
各种进制转换
第九章
短转移IP的修改范围-128~127 近转移IP的修改范围为-32768~32767
offset是取得标号的偏移地址
问题9.1
jmp short 标号 进行ip短转移
jmp near ptr 标号 进行IP近转移
jmp far ptr 标号 进行段间转移又称远转移 far ptr指明了用标号的段地址和偏移地址修改cs和ip
jmp word ptr 内存单元地址(段内转移) 就是把这个字赋值给IP 课本P182
jmp dword ptr 内存单元地址(段间转移) 功能:从内存单元地址处存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。
检测点9.1
jcxz指令为有条件转移指令 等价于 if((cx)==0) jmp short 标号;
检测点9.2
loop指令cx先--再判断
检测点9.3
对于指令jmp dword ptr [bx+0dh]的说法错误的是_b_。
对于如下程序:

若在指令jmp dword ptr [bx+2]执行后,要使程序再次从第一条指令开始执行,下列对data段中的数据的定义更合理的是_C。
有如下程序段,填写2条指令,使程序在运行中将s处的一条指令复制到s0处。( A )

mov ax,cs:[si]
mov cs:[di],ax
mov ax,cs:[di]
mov cs:[si],ax
mov ax,[si]
mov [di],ax
mov ax,ds:[di]
mov ds:[si],ax
mov cx,0
s: mov ax,bx
loop s
以上指令序列执行后mov ax,bx被执行了多少次_C。
下列能够改变CS:IP所指位置并能通过编译的指令是_D_。
第十章
ret指令:pop IP
retf指令:pop IP pop CS
检测点10.1
call 标号:push IP jmp near ptr 标号
call far ptr 标号: push CS push IP jmp far ptr 标号
call 16位寄存器:push IP jmp 16位寄存器
call word ptr 内存单元地址:push IP jmp word ptr 内存单元地址
call dword ptr内存单元地址:push cs push IP jmp dword ptr 内存单元地址
jmp short 标号 进行ip短转移
jmp near ptr 标号 进行IP近转移
jmp far ptr 标号 进行段间转移又称远转移 far ptr指明了用标号的段地址和偏移地址修改cs和ip
jmp word ptr 内存单元地址(段内转移) 就是把这个字赋值给IP 课本P182
jmp dword ptr 内存单元地址(段间转移) 功能:从内存单元地址处存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。
检测点10.3
检测点10.4
检测点10.5


浙公网安备 33010602011771号