单选题
第一章
A. bit B. 字节 C. 字长 D. 字
A PC机的最小信息单位是比特(bit),常用来表示一位二进制数字(0或1)。字节(byte)是计算机中常用的数据单位,一个字节由8个比特组成。字长(word)是指一个CPU可以一次处理的二进制数的位数。字是在汇编、编程等场合中用来表示数据长度的单位。
A. 8 B. 3 C. 12 D. 13
一个CPU的寻址能力是8KB,即CPU可以寻址的内存空间大小为8KB。一个字节是8位,因此8KB等于8 x 1024字节,即8192字节。CPU的地址总线宽度决定了CPU可以寻址的内存空间大小,因此,地址总线宽度为log2(8192) = 13位。因此,答案为D。
A. 11 B. 12 C. 13 D. 14
一个CPU的寻址能力为16KB,即CPU可以寻址的内存空间大小为16KB。因为CPU使用地址总线来寻址内存,所以地址总线的宽度就是CPU可以寻址的最大内存空间大小的二进制位数。16KB的二进制表示为2^14,所以地址总线的宽度为14位,答案为D。
A.0~3ff H B. 1~400 H C. 0~fffff H D. 1~100000H
1MB的存储器地址编号从0到0xFFFFF H,因为1MB等于1024KB,而1KB等于1024字节,所以1MB等于1024 x 1024字节,即1,048,576字节。每个字节需要一个地址编号,因此1MB的存储器地址编号从0到1,048,575,用16进制表示即为0x00000到0xFFFFF H。选项A、B、D的地址范围都小于1MB,不符合实际情况。
A. 2^40 B. 2^30 C. 2^20 D. 2^10
1TB是1万亿字节(10^12 bytes),而1个字节是8位(即1 byte = 8 bits),因此1TB等于8 x 10^12 bits。在计算机中,2的幂次方是常用的计量单位,因此将8 x 10^12 bits转换为2的幂次方,可以得到1TB等于2^40 bytes。因此,答案是A. 2^40。
A. 2^40 B. 2^30 C. 2^20 D. 2^10
1MB是指1兆字节,其中1兆等于2的20次方,即2^20,因此1MB等于2^20个Byte,答案为C。
A. 0~3ff H B. 1~400 H C. 0~fffff H D. 1~100000H
1KB的存储器共有1024个存储单元,每个存储单元占用1个字节,因此总共有1024个地址编号。由于地址编号是从0开始的,因此该存储器的地址编号从0到1023,用十六进制表示为0x000到0x3FF。因此,选项A是正确的答案。选项B、C、D的地址编号范围都超出了1KB存储器的地址编号范围。
A. 1024 B. 8×1024 C. 1000 D. 8000
1KB的存储器可以存储1024个字节,1个字节等于8个bit,因此1KB的存储器可以存储1024×8=8192个bit。因此,答案为B 。
A. 2^40 B. 2^30 C. 2^20 D. 2^10
1GB是2的30次方Byte,即2^30 Byte。因为1GB等于1024MB,1MB等于1024KB,1KB等于1024Byte,所以1GB等于1024*1024*1024 Byte,即2^30 Byte。
A. 16 B. 20 C. 10 D. 5
8086的数据总线宽度为16根,每次可以传输16位数据,即2个字节。要读取20字节的数据,需要进行10次读取,每次读取2个字节。因此,答案为C. 10。
A. 32 B. 20 C. 10 D. 5
8386的数据总线宽度为32根,每次可以传输32位(4字节)的数据。要读取20字节的数据,需要进行5次传输,即 20字节 ÷ 4字节/次 = 5次。因此,答案为D。
A. 二进制 B. 八进制 C. 十进制 D. 十六进制
A 在存储器中,数据和程序通常以二进制形式存放。这是因为计算机中的所有数据和指令都是以二进制形式表示的,即由0和1组成的二进制数。计算机的存储器只能存储二进制数,因此数据和程序都需要以二进制形式存储在存储器中。虽然在编程中也可以使用其他进制表示数据和指令,但最终都需要转换为二进制形式才能在计算机中执行。因此,二进制是计算机中最基本的数制。
A.64KB B.1MB C.1GB D.不确定
B 8086CPU的地址总线宽度为20位,可以寻址的地址数量为2的20次方,即1MB。
A.64KB B.1024KB C.16MB D.4096MB
80386CPU的地址总线宽度为32根,可以寻址的物理地址空间大小为2的32次方,即4GB。因此,80386CPU的寻址能力为D. 4096MB。
A.4 B.8 C.16 D.32
80386 CPU 的数据总线宽度为 32 位。
从内存中读取 1024 个字节的数据,每次读取的数据宽度为 1 字节,因此需要读取 1024 次。
80386 CPU 的数据总线宽度为 32 位,每次可以传输 4 个字节,因此每次可以读取 4 个字节的数据。所以,需要读取 1024 次,即需要传输 1024 * 1 字节的数据,共计 1024 * 1 / 4 = 256 次。
A.1 B.8 C.16 D.32
8086是16位处理器,一个字单元可以存储16个bit,因此答案是C.16。
A. 1024,1024 B. 8192,1024 C. 8192,8192 D. 1024,8192
一个1KB的存储器包含1024个存储单元,因为1KB等于1024字节。每个字节由8个二进制位组成,因此一个1KB的存储器可以存储8 x 1024 = 8192个二进制位。因此,答案是选项D,即一个1KB的存储器包含1024个存储单元,可以存储8192个二进制位。
第2~3章
075A:0110 B8 00 00 FF 07 00 B8 4C — CD 21 F3 69 20 8A 03 A1
那么,字型数据 00B8H对应的地址为( )。
A. 076A:11 B. 076A:16 C. 076B:0 D. 无法确定
C cs+ip 075a+0110=076b,第0个
A、 12340H~1234FH B、 01234H~F1234H C、 12340H~2233FH D、 12340H~FFFFFH
8086CPU中的偏移地址是一个16位的值,需要与段地址相加才能得到物理地址。因此只有通过变化偏移地址进行寻址时,物理地址的范围取决于段寄存器的值。
在这个问题中,给定的地址是1234H,仅通过变化偏移地址寻址,这意味着使用的是DS寄存器(或ES、SS、CS)作为段寄存器。因为在实模式下,段寄存器的值左移4位作为段地址,再加上偏移地址,就可得到物理。
偏移地址变化的范围为0~FFFFH,因此:
物理地址的限为12340H (段地址为1234H,加上偏移地址0H);
物理地址上限为2233FH (地址为1234H,加上偏移地址FFFFH)。
因此,选项C:12340H~2233FH是正确的。
A. 0 B. 12000H C. 10000H D. 1FFFFH
C 1010+0~FFFF=1010~1100F
A、 AX B、 BL C、 CS D、 DI
下列寄存器中,B. BL 是8位寄存器。
A、 AX B、 BL C、 CH D、 DL
下列寄存器中,A. AX 是16位寄存器。
A、 AX寄存器不能分为两个8位的寄存器
B、 BP寄存器不能分为两个8位的寄存器
C、 CS可以分为两个8位的寄存器
D、 PSW是一个通用寄存器,可以存放一般性的数据
下列说法正确的是:B
B、 BP寄存器不能分为两个8位的寄存器
BP寄存器(Base Pointer)是一个16位寄存器,不能分为两个8位的寄存器。它通常用于存储堆栈帧的基址。
A、 AX寄存器可以分为两个8位的寄存器。AX寄存器是一个16位寄存器,但可以分为AH(高位)和AL(低位)两个8位寄存器。
C、 CS寄存器不能分为两个8位的寄存器。CS寄存器(Code Segment)是一个16位寄存器,用于存储当前执行指令的代码段的起始地址。
D、 PSW(Program Status Word)并非通用寄存器,它是一种特殊的寄存器,用于存储程序的状态信息,如标志位等。它不能用于存放一般性的数据。
A、 MOV AX,1000 B、 MOV AL,BL
C、 MOV AL,1000 D、 MOV DS,AX
错误的指令是:
C、 MOV AL,1000
这指令试图将立即数1000移动到AL寄存器中,但是AL是一个8位寄存器,无法容纳1000这个16位的立即数。正确的写法应该是使用合适的寄存器大小或者有效的立即数。
八位寄存器AL的取值范围是0到255(FFFF H)
A、 MOV AX,100 B、 MOV BX,AL
C、 MOV AL,100 D、 ADD AL,BL
B MOV BX,AL 是错误的指令。由于BX是一个16位寄存器,而AL是一个8位寄存器,无法直接将AL的值移动到BX中。正确的方式应该是使用AX寄存器作为中介,将AL的值先移动到AX,再将AX的值移动到BX。
正确的指令应该是 MOV AX,AL,然后 MOV BX,AX。首先将AL的值移动到AX,然后将AX的值移动到BX
A、 MOV AX,100 B、 MOV BX,AL
C、 MOV 100,AL D、 ADD AL,1234H
A、 MOV AX,100
这条指令将立即数100移动到AX寄存器中,这是有效的。
mov ax,2000H
mov bx,3000h
add ax,bx
sub bx,bx
jmp bx
A、 5 B、 6 C、 7 D、 不确定
指令执行的过程中,CPU会不断地修改IP的值以指向下一条要执行的指令。
执行第 1 条 mov ax, 2000H 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为第2条指令的地址,即 mov bx, 3000h。
执行第 2 条 mov bx, 3000h 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为第3条指令的地址,即 add ax, bx。
执行第 3 条 add ax, bx 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为第4条指令的地址,即 sub bx, bx。
执行第 4 条 sub bx, bx 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为第5条指令的地址,即 jmp bx。
执行第 5 条 jmp bx 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为 bx 中存储的地址,即第2条指令的地址,即 mov bx, 3000h。然而此时bx的值已经为0,因此程序将会无限循环,不再修改IP的值了。
因此,执行这5条指令后,CPU会修改IP 6 次。
A、 CS B、 DS C、 SS D、 ES
代码段寄存器是 CS(Code Segment Register),CS寄存器中存储着当前程序代码所在的段地址,用于指向CPU需要执行的程序代码段。程序从CS寄存器指向的第一条指令开始,然后按顺序执行指令直到程序结束。
A、 AX B、 BP C、 IP D、 DS
指令指针寄存器是 IP (Instruction Pointer)。IP寄存器中存储着下一条要执行的指令的地址。CPU执行完一条指令后,会自动去IP寄存器中读取下一条指令的地址,然后继续执行。
A、 T B、 A C、 E D、 R
用R命令查看、改变CPU寄存器的内容
用D命令查看内存中的内容
用E命令改写内存中的内容
用U命令将内存中的机器指令翻译成为汇编指令
用T命令执行一条机器指令
用A命令以汇编指令的格式在内存中写入一条机器指令
A、 T B、 A C、 D D、 R
D
A、 T B、 E C、 D D、 R
B
A、 T B、 E C、 D D、 R
在debug中,执行CS、IP指向的内存单元处的指令是
T
命令。T命令可以单步执行一条指令,执行完后CPU暂停,等待用户的下一个命令。当执行完当前指令后,可以用R命令查看寄存器的值,L命令查看当前指令执行后的内存状态。
A、 45AB9H B、 4D6B9H C、 C259H D、 47CB9H
假设存储单元的地址线有16根,那么物理地址应该是 `45A0H` 左移4位得到的,即 `45A00H`。加上偏移量 `7CB9H` 得到真实的物理地址为 `45A0H + 7CB9H = 4D69H`。因此,选项B `4D6B9H` 是正确的。
A. DS、SI B. CS、IP C. SS、SP D. ES、DI
B 8086CPU中,任意时刻,CPU将 CS、IP 指向的内容当作指令来执行,即指令指针寄存器 (IP) 存储下一条指令在代码段内的偏移地址,代码段寄存器 (CS) 存储代码段的基地址。CPU 从代码段基地址加上偏移地址,得到指令的物理地址,然后从内存中读取指令并执行。
A. R命令可以修改寄存器的内容。 B. E命令可以修改内存单元的内容。
C. T命令每次只执行一条指令。 D. D命令可以查看内存单元的内容。
C
A. mov ax,bx B. mov ax,[bx] C. mov ds,0 D. mov ax,0
对于8086CPU,错误的指令是 C. mov ds,0。在8086CPU中,DS作为一个寄存器用来存储数据段的地址,通常情况下应该将其设置为一个非零的值,而不是直接将其清零。其他三个指令都是合法的:A. mov ax,bx 表示将BX寄存器中的值拷贝到AX寄存器中;B. mov ax,[bx] 表示将BX所指定的内存单元中的值读入AX寄存器中;D. mov ax,0 表示将AX寄存器中的值清零。
mov ax, 0095h
mov ah, 95h
add al, ah
A. 9680H B. 968AH C. 962AH D. 952AH
指令的执行过程如下:
1、将0095h赋值给AX寄存器,此时AX的值为0095h;
2、将95h赋值给AH寄存器,此时AX的值为9595h;
3、将AL寄存器和AH寄存器的值相加(95h + 95h = 12Ah),将结果存储在AL寄存器中,此时AX的值变为952Ah。因此,选项D是正确答案。
A. 是16位结构的CPU,其能够一次性处理传输暂时存储的信息的最大长度是16bit
B. 采用“段地址×16 + 偏移地址 = 物理地址”的方式生成存储单元的地址
C. 执行push指令和pop指令时,8086CPU从SS:SP中得到栈顶的地址
D. 在编程时,可将长度为1KB的一组地址连续,起始地址为32的倍数的内存单元当成栈空间来使用。
选项 D 中的错误在于“起始地址为32的倍数”,而实际上应该是“起始地址为16的倍数”。
在编程时,可以将一些内存单元用作堆栈空间。可以使用任何一个 16 位寄存器(如 SS)来存储堆栈的段地址,然后使用 SP 寄存器来跟踪堆栈指针。对于 8086 CPU,堆栈指针 SP 应该总是指向一个偶数地址。因此,堆栈的大小应该是偶数,并且堆栈的起始地址应该是 16 的倍数。因此,选项 D 中的“起始地址为32的倍数”是错误的。
正确的说法是:在编程时,可将长度为 1KB 的一组地址连续,起始地址为 16 的倍数的内存单元当成栈空间来使用。
A.0158H B.014AH C.0058H D.004AH
正确答案是 D,即 004AH。因为“add al,85H”指令的含义是将 al 寄存器的值加上 85H,即 al=al+85H。计算 00C5H+85H=00CAH,而 al 只是 ax 的低 8 位,因此在 ax 中保持不变的是高 8 位 ah 的值(为 00H),而低 8 位 al 的值改变为 0CAH。因此,ax 的值为 0CA00H,即 004AH
A.用mov、add、sub等指令通过偏移地址访问data段中的数据前,应将data段的段地址放在ds中。
B.一个段,可以既是数据段,又是桟段。
C.一个段,不可以既是代码段,又是数据段。
D.一个段中的内容对CPU来说是指令还是数据,关键在于对相关寄存器的设置。
C.一个段,不可以既是代码段,又是数据段。是错误的说法。
在汇编语言中,一个段可以既是数据段,也可以是代码段。但是,同一时刻一个段只能是数据段或者代码段,不能同时是两种类型。
A.64Byte B.64Kbit C.1MB D.64KB
8086PC机一个段的最大长度为64KB (D)
A.任意时刻,SS:SP指向栈顶元素。
B.retf指令不会引起栈空间超界。
C.push和pop实质上是一种内存传送指令。
D.8086CPU的栈机制,没有对避免栈空间超界提供支持。
B 栈空间自主管理
A.SS=1000H、SP=FFFEH B.SS=0H、SP=FFFEH
C.SS=1000H、SP=0 D.SS=2000H、SP=0
而栈是空的,SP应该指向栈底的下一个位置20000, D.SS=2000H、SP=0
A、 MOV AX,BX
B、 MOV BX,AX
C、 PUSH AX
POP BX
D、 MOV CX,AX
MOV AX,BX
MOV BX,CX
XCHG是x86汇编语言中的一个指令,用于交换两个寄存器或内存单元的值。其作用是将两个操作数(可以是寄存器或内存单元)的值进行交换。
例如,执行指令"XCHG AX, BX"会交换AX和BX寄存器中的值。在执行该指令后,AX中包含原来BX的值,而BX中包含原来AX的值。
可以使用 MOV AX, BX 和 XCHG AX, BX 指令组合完成和 XCHG AX, BX 相同的功能,指令序列为:
MOV CX, AX MOV AX, BX MOV BX, CX
这个指令序列将 AX 和 BX 的值互换,实现了 XCHG AX, BX 相同的功能。
A、 CS B、 DS C、 SS D、 ES
堆栈是一种数据结构,用来存储程序中的临时数据和返回地址等信息。而堆栈段(segment)是指堆栈所在段,即存放堆栈的物理内存区域。堆栈段由堆栈段地址(Segment Address)和堆栈段偏移地址(Stack Offset)组成。堆栈的段地址由堆栈段寄存器(Stack Segment Register)来存储。
因此,答案是C、SS(Stack Segment Register)。
A、 BP B、 SP C、 SS D、 IP
堆栈指针(Stack Pointer)寄存器是用来指示当前堆栈的栈顶地址的寄存器。它指向当前堆栈顶部的下一个空闲单元。在访堆栈时,堆栈指针先减1,然后将数据压入堆栈中;在取出数据时,先从堆栈中取出数据,然后堆栈指针再加1。
因此,堆栈指针寄存器的名称是B、SP(Stack Pointer)。
A、 加1 B、 减1 C、 加2 D、 减2
执行一次PUSH指令,SP寄存器将减2(D)。因为在8086CPU中,每个栈元素占用两个字节,所以在执行PUSH指令时,先将栈顶指针SP减去2,然后将数据写入到栈顶位置。
A、 加1 B、 减1 C、 加2 D、 减2
执行一次POP指令,SP寄存器将加2(C)。因为在8086CPU中,每个栈元素占用两个字节,所以在执行POP指令时,先将栈顶元素弹出并写入到目标操作数中,然后将栈顶指针SP加上2,指向下一个栈元素。
A、 操作对象是字 B、 堆栈的长度是没有限制
C、 任何时刻,SS:SP指向栈顶元素 D、 堆栈位于内存中
B 个堆栈最大只能设置为64KB
A、 POP AX B、 POP 126CH C、 PUSH AL D、 PUSH AX,BX
A
A、 1MB B、 1KB C、 64KB D、 64MB
8086系统中,一个堆栈最大只能设置为64KB,因为8086只有16位的寻址能力,每个内存地址最大只能表示64KB的内存空间,而堆栈是存储在内存中的,所以一个堆栈的大小最大只能是64KB。所以答案是C、64KB。
A、MOV SS,20000H
MOV SP,21001H
B、MOV AX,2000H
MOV SS,AX
MOV SP,1001H
C、 MOV AX,2000H
MOV SS,AX
MOV SP,1002H
D、 MOV AX,2000H
MOV SS,AX
MOV SP,1000H
C SS需要用通用寄存器中转,栈空指向栈顶下一位置
A、 1FFFH B、1998H C、 2002H D、1FFEH
PUSH指令将寄存器或内存单元中的数据压入堆栈中,同时SP的值减2,指向下一个空闲的堆栈单元。
执行指令"PUSH AX"后,将将AX寄存器的值压入堆栈中,同时SP的值减2。因此,最终SP的值应该是2000H-2=1FFEh。所以答案是D、1FFEH。
1000:0000 89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8 20
若DS=1000H,AX=0,那么汇编指令“MOV AL,[0008H]”执行完后AX 的值为
A、 0H B、 2900H C、 0029H D、 0010H
在debug中,用“d 1000:0 0f”查看内存,结果如下。 1000:0000 89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8 20
若DS=1000H,AX=0,那么汇编指令“MOV AL,[0008H]”执行完后AX 的值为 D、 0010H。
汇编指令“MOV AL, [0008H]”是将偏移地址为0008H的数据读入AL寄存器中。由于DS=1000H,因此要访问的内存单元地址应该为DS:0008H,也就是10008H。根据给出的内存内容,可以知道10008H处存储的数值为10H,因此执行完“MOV AL, [0008H]”指令后,AL的值为10H,而AX寄存器的高位则保持不变,即为00H。
因此,AX的值为0010H。
1000:0000 89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8 20
DS=1000H,AX=0,那么汇编指令“MOV AX,[0008H]”执行完后AX 的值为
A、 1029H B、 298DH C、 2910H D、 8D29H
C
1000:0000 89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8 20
1000:0010 79 87 C4 EF 25 66 F7 40 -A9 BD C4 5D 6E 7F A1 2B
1000:0020 81 15 4D ED 83 B7 8F 1A -89 7D B6 9C 3E 73 A2 21
执行前DS=0,AX=0,BX=0,那么执行下列汇编指令,完后AX 的值为( )
MOV AX,1002H
MOV DS,AX
MOV AX,[0]
A、 8589H B、 8779H C、 1581H D、 8985H
C DS:IP 1000:20
1000:0000 89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8 20
1000:0010 79 87 C4 EF 25 66 F7 40 -A9 BD C4 5D 6E 7F A1 2B
1000:0020 81 15 4D ED 83 B7 8F 1A -89 7D B6 9C 3E 73 A2 21
执行前DS=0,AX=0,BX=0,那么执行下列汇编指令,完后AX 的值为( )
MOV AX,1000H
MOV DS,AX
MOV AX,[0]
A、 8589H B、 8779H C、 1581H D、 8985H
A
B sp-2
A.栈空的时候,SP的值为FFFeH B.栈满的时候,SP的值为0
C.这段栈空间的大小为4KB D.使用这段栈空间,有可能会出现栈越界
D. 使用这段栈空间,有可能会出现栈越界:由于栈是向下生长的,在使用栈的过程中,如果向栈中压入的数据超出了栈的大小,就会出现栈溢出(stack overflow)的情况,从而导致程序异常终止。因此,在使用这段栈空间时,有可能会出现栈越界的问题。
A.0 B.20000H C.10000H D.20010H
B
A.逻辑地址 B.偏移地址 C.物理地址 D.段地址
CPU传递到地址总线上的地址是物理地址。
在使用分段机制的8086处理器中,CPU产生的地址有两个部分,一个是段地址,另一个是偏移地址,它们通过一定的计算得出最终的物理地址。但是,当CPU需要访问内存时,会将最终得到的物理地址直接传递到地址总线上,由内存控制器根据物理地址来确定要访问的实际内存单元。因此,CPU传递到地址总线上的地址是物理地址。
A.可将BX当成两个8位寄存器,在偏移地址范围为0~255时,可以用“mov ax,[bl]”来实现将内存中的数据读到ax中
B.可以用“byte ptr”实现将SI当成两个8位寄存器使用
C.可将AX、BX、CX、DX当成8个8位寄存器使用
D.AX、ah、al是不同的寄存器,指令“add al,bl”的执行不会影响AX的值
B 可以用“byte ptr”实现将SI当成两个8位寄存器使用。
在x86汇编语言中,可以使用“byte ptr”、“word ptr”、“dword ptr”等关键字作为指令操作数的前缀,以确定所需访问的数据类型。因此,可以使用“byte ptr”将SI寄存器视为单独的8位寄存器来使用。
例如,在8086处理器中,MOV AL,[SI]指令可以用来从存储在DS:SI处的内存单元中读取一个字节。如果想要让SI寄存器被当作两个8位寄存器来处理,可以这样编写指令:
MOV AL, [BYTE PTR SI]
MOV AH, [BYTE PTR SI + 1]
这样就可以通过指定“BYTE PTR”前缀,让SI寄存器被视为两个独立的8位寄存器,分别对应着存储在DS:SI和DS:SI+1处的内存单元。
A.8086CPU有20根地址总线,它的寻址能力为1MB
B.一个物理地址可以对应多个段地址与偏移地址
C.因为段寄存器是16位,所以一个段最大为64KB
D.CPU内部有一个能合成20位地址的地址加法器
B选项与8086CPU寻址相关的说法是错误的。一个物理地址只能对应唯一的段地址与偏移地址。
A选项是正确的,8086CPU有20根地址总线,它的寻址能力为1MB。
C选项是正确的,因为8086CPU在实模式下采用分段机制,每个段最大可以寻址64KB的空间。
D选项是正确的,CPU内部有一个能合成20位地址的地址加法器,用于将段地址和偏移地址组合成物理地址。
以下说法是错误的:
B.一个物理地址可以对应多个段地址与偏移地址。
每个物理地址都只会对应唯一的一个段地址和偏移地址。由于8086CPU使用了分段寻址机制,因此同一个物理地址可能会被不同的段地址和偏移地址组合得到。但是反过来,一个物理地址只有唯一的一个值。
A、C、D三个选项的说法均正确:
A. 8086CPU有20根地址总线,它的寻址能力为1MB。其中,20根地址总线可以寻址2^20个内存单元,即1MB的内存空间。
C. 因为段寄存器是16位,所以一个段最大为64KB。由于使用分段机制时,一个段的大小由段寄存器的值决定,因此,使用16位的段寄存器时,一个段的大小最大为64KB。
D. CPU内部有一个能合成20位地址的地址加法器。在8086CPU中,物理地址由段地址和偏移地址组成,这两个部分经过地址加法器相加后形成20位物理地址。这个地址加法器可以将分段寻址的地址转换为实际物理地址。
mov sp,0
push ss
A.0 B.0fffeh C.2 D.内存ss:0处的数据的值
B
执行
mov sp, 0
指令后,SP寄存器的值被赋为0。接着执行
push ss
指令,将SS寄存器中的值压入栈中。由于在8086CPU中,栈是向下生长的,所以压栈会使SP的值减2。因此,此时SP的值为-2(0xFFFF FFFEH)。选项B:0fffeh即为上述计算得到的结果,因此答案为B。
A.此处用于存储系统时间,一直在自动更新
B.debug存在延时,第二次查看即可看到用e命令写入的数据
C.此处处于ROM空间,不可以被改变
D.此处处于显存空间,当屏幕刷新时,此处的数据被更新了
C
A.4FC0:00E0 B.4CE0:2EE0 C.40CE:0F00 D.40C0:F0E0
B 加起来
mov ax,017ch
add al,0b4h
A.0130H B.0230H C.012FH D.022FH
A 只看低位 7c+b4
第4~6章
A.编译、加载、连接、执行 B.加载、编译、连接、执行
C.连接、编译、加载、执行 D.编译、连接、加载、执行
正确的答案是 D. 编译、连接、加载、执行。
下面是每个步骤的解释:
编译:首先,源程序需要通过编译器进行编译,将高级语言的源代码翻译成机器语言的目标代码。编译过程将源代码转化为可执行的二进制文件。
连接:连接器将编译生成的目标代码与其他必要的库函数或模块进行链接,生成最终的可执行文件。连接器将各个模块之间的引用关系解析,并生成可执行文件所需的所有符号和地址信息。
加载:将可执行文件加载到内存中,操作系统负责将文件从硬盘读取到内存中的适当位置。加载过程中,操作系统为可执行文件分配内存空间,并将程序的指令和数据加载到相应的内存地址中。
执行:当程序被加载到内存后,CPU开始执行程序。CPU按照指令的顺序逐条执行程序中的指令,将数据从内存读取到寄存器中进行运算,然后将结果写回内存或寄存器中。
因此,编译、连接、加载、执行是从写出汇编源程序到最后被CPU执行的正确步骤顺序。
A.编译产生的*.obj文件不能在操作系统下直接运行
B.连接产生的*.exe文件里面没有伪指令
C.编译可以检查出语法错误
D.连接可以检查出逻辑错误
错误的说法是 D. 。
解释:
A. 编译产生的*.obj文件不能在操作系统下直接运行:这是正确的说法。编译器将源代码编译成目标代码(*.obj 文件),这些目标代码包含了机器语言指令和数据,但还没有完成最终的链接过程,所以无法直接在操作系统下运行。
B. 连接产生的*.exe文件里面没有伪指令:连接器在将目标代码链接成可执行文件时,可能会将伪指令(例如,用于程序入口点和初始化的伪指令)转换成真正的机器指令。这些伪指令在最终的可执行文件中是存在的。
C. 编译可以检查出语法错误:这是正确的说法。编译器在编译源代码时,会进行词法分析和语法分析,以检查代码中的语法错误。如果发现语法错误,编译器将报告错误并停止编译过程。
D. 连接可以检查出逻辑错误:这是错误的说法。连接器的主要任务是解析模块之间的引用关系,将各个模块的目标代码组合在一起,并生成可执行文件。连接器并不涉及逻辑错误的检查,逻辑错误通常在程序执行时才能被发现。
因此,错误的说法是 B. 连接产生的*.exe文件里面没有伪指令。
C 段最少16B db字节 dw字 dd双字
A. SA×16H B. SA×16 C. (SA+16H)×16H D. (SA+16)×16
在x86架构的实模式下,PSP(Program Segment Prefix)是程序段前缀,它位于内存段地址的开头,用于存储有关程序的信息。偏移地址为0的位置处于PSP的开始位置。
PSP的段地址为SA,偏移地址为0,表示PSP的物理地址为SA×16(由于段地址乘以16后才是物理地址)。由于偏移地址为0,程序的起始地址即为PSP的物理地址。
因此,答案是 B. SA×16
A. 一个汇编语言源程序从写出到执行需经过.编写.asm文件→将.asm文件编译为.obj文件→将.obj文件连接成.exe文件→.exe文件执行。
B. 在汇编语言源程序中,包含三种指令:汇编指令、伪指令、其他符号。
C. 在汇编语言源程序中,不由编译器执行的伪指令有对应的机器指令。
D. 在汇编语言源程序中,汇编指令是有对应机器码的指令,其所对应的机器指令由CPU执行。
错误的说法是 C. 在汇编语言源程序中,不由编译器执行的伪指令有对应的机器指令。
解释:
A. 一个汇编语言源程序从写出到执行的过程通常包括将汇编语言源文件(.asm)编译为目标文件(.obj)和将目标文件连接为可执行文件(.exe),最后执行可执行文件。因此,选项 A 描述了正确的过程顺序。
B. 汇编语言源程序中包含三种指令:汇编指令(对应机器指令)、伪指令(用于汇编过程控制和数据定义等,不生成机器指令)和其他符号(如标签、变量名等)。这是正确的说法。
C. 在汇编语言源程序中,伪指令通常由汇编器或编译器执行,它们不会生成对应的机器指令。伪指令用于提供汇编过程中的指令控制、宏展开和数据定义等功能。因此,错误的说法是伪指令有对应的机器指令。
D. 汇编指令是有对应的机器码的指令,其所对应的机器指令由CPU执行。这是正确的说法。
综上所述,错误的说法是 C. 在汇编语言源程序中,不由编译器执行的伪指令有对应的机器指令。
A. masm t1 B. masm t1; C. masm c.\t1 D. masm c.\t1;
C
Int 21h
CPU执行完这两条指令后,( )。
执行完这两条指令后,CPU将返回到DOS。
解释:
这两条指令的作用是调用DOS的系统功能。具体来说,"mov ax, 4c00h" 将 4c00h(十进制为32768)存储在寄存器 AX 中,然后 "Int 21h" 执行中断指令,将控制权转交给DOS的中断处理程序,该程序根据 AX 中的值执行相应的操作。
在这种情况下,DOS使用功能码为4c的退出功能,AX 中的值为退出码。因为指令中给出的退出码为4c00h,所以CPU将返回到DOS,并将该退出码作为返回状态。
因此,正确答案是 A. 返回到DOS。
A. 代码段中的信息都会被当做指令执行
B. CS:IP指向过的指令一定被CPU执行过
C. 用Debug的t命令,一次只能执行一条汇编指令
D. 通过“ASSUME”建立的段与段寄存器之间的关联是编译器要处理的
正确的说法是 D. 通过"ASSUME"建立的段与段寄存器之间的关联是编译器要处理的。
解释:
A. 代码段中的信息不都被当作指令执行。代码段包含指令和其他数据,例如常量、变量等。CPU根据CS(代码段寄存器)和IP(指令指针寄存器)的值来确定要执行的下一条指令。
B. CS:IP指向的指令不一定被CPU执行过。CS:IP指向的位置是下一条要执行的指令的地址,但不保证CPU已经执行过该指令。
C. 使用Debug的"t"命令可以单步执行汇编指令,一次只执行一条指令。
"t" 命令在 Debug 工具中用于单步执行汇编指令。每次执行 "t" 命令时,Debug 会执行当前 CS:IP 指向的指令,并将 CS:IP 更新到下一条指令的地址。这样,如果下一条指令是无条件跳转指令(如 JMP),那么一次 "t" 命令就会执行多条指令。
因此,使用 "t" 命令执行的汇编指令数量取决于程序中的控制流和跳转指令的存在。如果程序中没有跳转指令或者只有顺序执行的指令,那么每次执行 "t" 命令将只执行一条指令。但是,如果程序中有跳转指令,那么一次 "t" 命令可能会执行多条指令。
D. "ASSUME"语句用于建立段与段寄存器之间的关联。这个关联关系是由编译器处理的,在编译阶段确定。"ASSUME"语句告诉编译器如何将段与段寄存器相关联,以正确生成指令。因此,正确的说法是通过"ASSUME"建立的段与段寄存器之间的关联是编译器要处理的。
mov al,198
and al, 01010011B
or al,01010101B
A. al = 57 B. al = 57H C. al = 42 D. al = 42H
执行下面的指令后,正确的结果是 B. al = 57H。
解释:
首先,执行 "mov al, 198" 指令将十进制数 198(11000110B)移动到寄存器 AL 中。此时 AL 的值为 11000110B,即 C6H。
接下来,执行 "and al, 01010011B" 指令对 AL 中的值与 01010011B 进行按位与操作。按位与操作会将两个操作数对应位上的位进行与运算,结果为 01000010B,即 42H。
最后,执行 "or al, 01010101B" 指令对 AL 中的值与 01000010B 进行按位或操作。按位或操作会将两个操作数对应位上的位进行或运算,结果为 01010111B,即 57H。
因此,执行完这三条指令后,AL 的值为 57H。
正确的结果是 B. al = 57H。
A. mov ax,[bp] B. inc word ptr [bx] C. add al,cl D. and [bp],al
需要使用 DS 的指令是 A. mov ax,[bp]。
解释:
在汇编语言中,使用 DS(数据段寄存器)指定要访问的数据段。指令 A. mov ax,[bp] 中的方括号表示要访问内存地址,而不是寄存器的内容。在这种情况下,访问的内存地址是通过将 BP(基址指针寄存器)中的值与 DS 相加得到的。因此,这个指令需要使用 DS。
指令 B. inc word ptr [bx] 是对 BX 寄存器中的内存地址指向的字(16 位数据)进行递增操作,不涉及 DS。
指令 C. add al,cl 是将 AL 寄存器和 CL 寄存器中的值相加,不涉及内存访问和 DS。
指令 D. and [bp],al 是将 AL 寄存器的值与 BP 寄存器中的内存地址指向的字(8 位数据)进行按位与操作,也不涉及 DS。
所以,需要使用 DS 的指令是 A. mov ax,[bp]。
指令
mov ax, [bp]
的含义是将堆栈段(SS)中,相对于基址指针(BP)所指向的内存地址处的字(16 位数据)读取到寄存器 AX 中。对于该指令,涉及到的段寄存器有两个:
堆栈段寄存器(SS):该寄存器存储了当前堆栈段的段地址。通过它,我们可以访问堆栈上的数据。
数据段寄存器(DS):当使用 BP 作为基址指针时,默认情况下,DS 与 SS 关联。因此,在指令
mov ax, [bp]
中,数据段寄存器 DS 的值与堆栈段寄存器 SS 的值相同。所以,
mov ax, [bp]
指令使用了数据段寄存器 DS 和堆栈段寄存器 SS。它从相对于基址指针所指向的内存地址处读取一个字(16 位数据),并将其存储到寄存器 AX 中。
dd 1234h
data ends
data段中的数据1234h在内存中的存储情况为( )。
A. 12 34 00 00 B. 34 12 00 00 C. 00 00 12 34 D. 00 00 34 12
data段中的数据1234h在内存中的存储情况为 B. 34 12 00 00。
在x86架构中,数据以字节为单位进行存储,并且采用小端字节序(Little Endian)。因此,对于一个16位的数据1234h,它在内存中的存储方式是低字节在前、高字节在后的顺序。
对应于数据1234h,其存储情况为:
低字节:34 高字节:12
由于是小端字节序,所以低字节34位于内存地址较低的位置,高字节12位于内存地址较高的位置。剩余的字节为00 00。
因此,数据1234h在内存中的存储情况是 34 12 00 00,选项 B. 34 12 00 00 正确。
A.RAM B.ROM C.CPU D.CMOS
BIOS(基本输入/输出系统)存储在 B. ROM(只读存储器)中。
BIOS是计算机系统的基本固件,提供了计算机启动和硬件初始化的功能。它包含了用于操作系统和应用程序的低级别软件和驱动程序。BIOS通常被存储在计算机主板上的ROM芯片中,这种ROM芯片被称为BIOS芯片或固化BIOS(Firmware BIOS)。
选项A.RAM(随机存储器)是指计算机的主内存,用于临时存储程序和数据。BIOS不存储在RAM中。
选项C.CPU(中央处理器)是计算机的主要计算和控制单元,不用于存储BIOS。
选项D.CMOS(互补金属氧化物半导体)是一种用于存储计算机的基本设置和配置信息的特殊类型的RAM。它通常包含了BIOS设置信息,但不存储完整的BIOS程序。因此,CMOS不是BIOS存储的主要位置。
因此,正确答案是B. ROM。
A.ds、es B.ds、ss C.ss、ds D.es、ss
在8086 CPU中,当使用 `[di]` 和 `[bp]` 的方式访问内存时,默认的段寄存器依次是 B. ds(数据段寄存器) 和 D. ss(堆栈段寄存器)。
- `[di]` 使用 DI(目的索引寄存器)作为基址指针,并默认使用 DS(数据段寄存器)作为段地址,用于访问数据段中以 DI 寄存器指定的偏移地址处的内存。
- `[bp]` 使用 BP(基址指针寄存器)作为基址指针,并默认使用 SS(堆栈段寄存器)作为段地址,用于访问堆栈段中以 BP 寄存器指定的偏移地址处的内存。
因此,8086 CPU 默认的段寄存器依次是 B. ds、ss。
A.循环次数 B.所加载的文件的字节数。
C.是系统默认的值,没有实际意义 D.程序的长度。
在 Debug 加载 .exe 文件后,在对寄存器中的值进行改变之前,CX 中的值通常表示循环次数(A. 循环次数)。
CX 寄存器在很多汇编语言中用作计数器寄存器,常用于实现循环控制结构。在某些指令中,CX 寄存器的值用于指定循环的迭代次数。在 Debug 中加载 .exe 文件后,如果在执行程序之前未修改 CX 寄存器的值,那么其初始值通常表示循环的次数。
因此,正确答案是 A. 循环次数。
073F:0000 CD 20 3E A7 00 EA FD FF-AD DE 4F 03 A3 01 8A 03
073F:0010 A3 01 17 03 A3 01 92 01-01 01 01 00 02 FF FF FF
073FH:0013H处的字型数据是( )。
A.007AH B.03A3H C.A303H D.0317H
C
A.mov ax,[bp+dx] B.mov ax,ds.[bp+bx]
C.mov ax,ss:[si][di] D.mov ax,cs.6[si]
在8086 CPU中,正确的指令是 A.
mov ax,[bp+dx]
。这条指令使用基址指针 BP 和变址指针 DX 进行内存访问。它将从[BP + DX]
所指向的内存位置读取一个字(16位)并将其值加载到 AX 寄存器中。
A.jmp B.div C.shl D.jcxz
C
指令
div
用于执行无符号除法操作。它将一个被除数与寄存器中的除数相除,并将商存储在相应的寄存器中。语法如下:
div divisor
其中,
divisor
是除数,可以是寄存器或内存操作数。指令执行时,被除数被视为一个双字(32位)或字(16位),被除数的高位在 DX 寄存器中,低位在 AX 寄存器中。除数则与 AX 寄存器中的内容相除,商存储在 AL(或 AX)寄存器中,余数存储在 AH(或 DX)寄存器中。
shl
指令将目标操作数的二进制表示向左移动指定的位数,并在右侧填充零。移出的位会存储到进位标志 CF 中。
A.数据标号表示了内存单元的地址和长度。
B.后边加“:”的地址标号,只能在代码段中使用。
C.应用assume将指令中的数据标号所在的段,与一个段寄存器联系起来,这样,使用数据标号的指令,就可以从段寄存器中得到所用数据标号的段地址。
D.可以将一个标号集合存储在直接定址表中。
错误的说法是 D. 可以将一个标号集合存储在直接定址表中。
直接定址表(Direct Addressing Table)并不是用来存储标号集合的数据结构。直接定址表是一种寻址方式,用于根据给定的地址直接访问内存中的数据。它通常用于类似于数组或表格的数据结构的访问,其中地址被用作索引来获取特定位置上的数据。
标号(Label)是在汇编语言中用来标识代码或数据位置的符号。它们通常与指令或数据定义一起使用,用于指示程序的流程或数据的位置。
因此,选项 D 是错误的,因为直接定址表与标号的含义和用途不同。
A.这个程序设置(CS)*16+(IP)= PSP所在内存空间的首地址。
assume cs:code
code segment
start: mov ax,0
mov es,ax
mov word ptr es:[200h],0
mov es:[202h],ds
jmp dword ptr es:[200h]
code ends
end start
B.PSP共有256个字节。
C.DOS通过PSP来与其所加载的程序进行通信。
D.用debug加载一个其功能是设置(ds)=(cs)的程序后,即用a命令写且用T命令运行以下程序段:
mov ax,ds
sub ax,10
mov ds,ax
之后用“d ds:0 ff”,可对PSP所在的内存空间进行查看。
D.用debug加载一个其功能是设置(ds)=(cs)的程序后,即用a命令写且用T命令运行以下程序段:
mov ax,ds
sub ax,10
mov ds,ax
之后用“d ds:0 ff”,可对PSP所在的内存空间进行查看。
这个说法是错误的。在给定的代码段中,ds寄存器的值被修改为ds-10,而不是设置ds等于cs。因此,使用"d ds:0 ff"命令来查看PSP所在的内存空间将不会显示正确的结果。
mov ax,6776h
add al,90h
add ah,90h
A.6806H B.F806H C.F706H D.6706H
C 不会进位
mov al,01100011b
and al,00111011b
or al,00111011b
A.00100011B B.00111011B C.01111011B D.前三个选项都不对。
B
assume cs:a
codesg segment
mov ax,20h
mov ax,4c00h
int 21h
codesg ends
a segment
mov bx,30h
mov ax,4c00h
int 21h
a ends
b segment
mov bx,40h
mov ax,4c00h
int 21h
b ends
end
A.mov ax,20h B.mov bx,30h C.mov bx,40h D.以上选项都不对
B
根据给定的程序,首先执行的是"a segment"部分。在该部分的第一条指令中,将bx寄存器中的值设置为30h。因此,CPU执行的第一条指令是mov bx,30h
A.inc word ptr ds:[0] B.mov es:[0],ds:[0]
C.mov ax,[bx+bp] D.add Cs,ax
b
A.00 00 10 00 B.00 00 00 10
C.00 10 00 00 D.10 00 00 00
A.机器码 B.伪指令 C.源程序中定义的数据 D.jmp指令中的地址
A.可以通过定义段的方式给程序分配安全的内存空间
B.DOS和应用程序一般不会使用0.200~0.2ff这段空间
C.使用安全的内存空间,不会影响dos操作系统和其他合法程序的运行
D.使用mov指令时,不用担心损坏系统数据
A.SEGMENT B.ASSUME C.sti D.end
A.伪指令和汇编指令所对应的字符串
B.用汇编语言写的源程序中的信息
C.由一系列二进制位组成的信息
D.汇编指令所对应的字符串
A.mov ax,ds B.push [bx] C.inc [bx] D.add bp,2
A.一个段的起始地址必须是16的整数倍
B.在源程序中定义一个段,在运行程序时,CPU不会因此定义而知道这个段的大小。
C.一块内存空间可以既是代码段,又是数据段。
D.CPU将某个段用做栈,是因为assume指令将其与SS寄存器相关联
A.mov ax,’d’ B.mov al,’a’+3 C.mov al,’A’+3 D.or al,’d’
A.汇编语言中的标号属于伪指令
B.汇编指令一定有对应的机器码
C.伪指令由编译器识别,编译器将其转化为对应的机器码
D.“+”一般会被编译成add指令
assume cs:code
masm segment
dw 5 dup(‘a’,’b’,’c’)
masm ends
code segment
start: mov ax,code
sub ax,masm
mov ax,4c00h
int 21h
code ends
end start
A.15 B.1 C.2 D.3
A.Debug将程序加载到内存后,不执行任何命令前,IP的值一定为零
B.通过debug可以查看标志寄存器某些位的值
C.Debug将程序加载到内存后,不执行任何命令前,CX的值有可能是1024
D.T命令有可能一次执行一条以上的指令
A.汇编指令
B.机器指令
C.伪指令
D.“+”、“-”、“*”、“/”等符号
A.伪指令在编译的过程中被编译器执行了
B.使用masm编译器进行编译,只能生成目标文件
C.可执行文件中包含程序和描述信息
D.DOS提供的command程序可以将可执行文件中的程序加载进内存
A.在用masm.exe编译的汇编语言的源程序中,end和ends都属于伪指令
B.在debug中调试一个程序,在用p命令依次执行程序中的“mov ax,4c00h”与
“int 21h”两条指令后,屏幕上显示“Program terminated normally”,可说明此
时程序已返回到DOS
C.用于程序返回的相关指令是CPU来执行的
D.对于程序返回,DOS提供了相应的中断例程
mov ax,20
mov ds,ax
mov ax,[1]
之后查看内存,显示如下:
0:200 80 00 70 00 60 00 ……
接着用t命令执行这几条指令,“mov ax,[1]”执行后,AX的值是多少?( )
A.7000H B.0070H C.1 D.0080H
mov ax,20
mov es,ax
mov byte ptr es:[0],80h
mov byte ptr es:[1],00h
mov byte ptr es:[2],70h
mov byte ptr es:[3],00h
mov ax,es:[1]
A.7000H B.0070H C.1 D.0080H
A.汇编指令 B.伪指令 C.机器指令 D.标号
A.通过command将程序加载进内存后,command将根据可执行文件中的描述信息,设置CS.IP指向第一条要执行的指令
B.通过debug将程序加载进内存后,用r命令查看CX的值,可看到与程序的长度相关的信息
C.通过debug将程序加载进内存后,DS指向程序的数据段,CS指向程序的代码段
D.在源程序中用end指令,可以决定程序加载后IP寄存器的值
A.PSP占256个字节的地址空间
B.DOS通过PSP与被加载的程序通信
C.用debug将程序载入内存后,PSP与代码段的段地址一致,偏移地址相差100h
D.用debug将程序载入内存后,可用“d ds:0 ff”查看PSP的全部内容
A. mov al,2000 B. push [0] C. add al,100h D. mov dx,1000h
A. Push、pop指令通过修改ss:sp的值来操作栈中的数据
B. 栈空时,ss:sp指向栈底
C. 栈满以后,如果继续向其中压入数据,会覆盖栈顶之后的高地址内存单元
D. 栈满以后,如果继续向其中压入数据,不一定会覆盖其地址比栈顶的地址更低的内存单元
A. pop ax B. mov ax,bx C. mov ax,0 D. in al,20h
assume cs:code,ds:data
data segment
db ’1975’
data ends
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah
mov ax,0
mov bx,0
mov cx,8
s: add ax,cs:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end
A. 程序的起始段地址为0a31h
B. (cs)=0a31h,(ip)=0
C. ds的值不是data段的段地址
D. “mov ax,0”的机器码的内存地址是0a31H:0020H
A.十六进制和十进制 B.十进制和二进制
C.十进制和十六进制 D.二进制和十六进制
mov bx,1
mov cx,___
loop s1
mov bx,2
s1: inc bx
A. 0 B. 1 C. 2 D. 3
A. [bx+si+idata] B. [bx+di] C. [bp+si] D. [bx]
A. ax,bx,cx,dx B. ds,es,cs,ss
C. sp,bp,ip,bx D. si,di,bp,bx
A. 4 B. 20 C. 40 D. 80
A. mov ax,[bp+si] B. mov ax,[bx] C. mov ax,2[si] D. mov al,[dx]
A. [di] B. [bx+idata] C. [bx+di] D. [bp+di+idata]
A.寄存器间接寻址 B.寄存器相对寻址 C.基址变址寻址 D.相对基址变址寻址
A.AX B.AH C.AL D.DX
A.执行div指令可能触发中断
B.div指令的除数既可以是16位,也可以是8位
C.div指令的被除数或存放在DX和AX中,或存放在AX中
D.div指令的运算结果有商和余数两部分
A.401CH B.001CH C.0040H D.1C40H
A.被除数可以放在寄存器中,也可以放在内存单元中。
B.若结果的商大于al或ax所能存储的最大值,将引发CPU内部的除法溢出错误。
C.可以重写0号中断处理程序,使得程序可以处理除法溢出的情况。
D.可使用div指令编写一个计算32位被除数/8位除数的子程序。
mov al,96h
mov bl,12h
mul bl
A. 1152h B. 0a8ch
C. 0a82h D. 0f88ch
mov ah,1
mov al,10h
mov bl,2
mul bl
A.0220H B.2000H C.0020H D.0120H
A、 OR AX,0FFF8H
B、 AND AX,0FFF8H
C、 AND AX,0FFF7H
D、 AND AX,0FFFBH
A、 XOR AX,08H
B、 OR AX,08H
C、 OR AX,88H
D、 XOR AX,88H
A、 NOT AX
B、 AND AX,1FFFH
C、 XOR AX,0E000H
D、 OR AX,0E000H
X1 DB 1,2,3,4,5,6,7,8
X2 DW 1,2,3,4,5,6,7,8
以下指令中错误的是( )
A、 MOV X1,100
B、 MOV AX,X1
C、 MOV AX,X2
D、 MOV X2,100
X1 DB 1,2,3,4,5,6,7,8
X2 DW 1,2,3,4,5,6,7,8
以下指令中正确的是( )
A、 MOV X1,1000
B、 MOV AX,X1
C、 MOV AH,X2
D、 MOV X2,1000
X1 DB 1,2,3,4,5,6,7,8,9,10
X2 DW 100
执行完下面的程序段之后,DX的值是( )。
MOV CX,10
MOV DX,X2
S: MOV BX,CX
MOV AL,X1[BX]
MOV AH,0
ADD DX,AX
DEC CX
LOOP S
A、 124 B、 224 C、 155 D、 255
A、 mov ax,0
mov ds,ax
mov bx,202h
mov al,[bx]
B、 mov ax,0
mov ds,ax
mov bp,202h
mov al,[bp]
C、 mov ax,0
mov ds,ax
mov bx,200h
mov al,[bx+2]
D、 mov ax,0
mov ds,ax
mov bp,200h
mov al,ds:[bp+2]
A、 MOV AX,[BX+BP] B、MOV AX,[BX+SI]
C、 MOV AL,[SI+DI] D、 MOV AL,[SI+DX]
A、 MOV AX,[BX+SI] B、 MOV AX,[BX+DI]
C、 MOV AL,[SI+DI] D、 MOV AL,[SI+BP]
A、 MOV DS:[BP+BX],AH B、 ADD [BX],100
C、 MOV [SI],AL D、 MOV [SI],100
A、 MOV DS:[BP+SI],AH B、ADD WORD PTR [BX],100
C、 MOV [SI],AL D、 MOV [SI],100
A、 MOV AX,987
MOV BX,6
MUL AX,BX
MOV BX,6
MUL BX
C、 MOV AX,987
MOV BL,6
MUL BL
D、 MOV AL,6
MOV BX,987
MUL BX
A、 MOV AX,987
MOV BX,30
DIV BX
MOV BL,30
DIV BL
MOV BL,30
DIV BL
D、 以上选项都不对
MOV AX,87
MOV BX,6
MUL BX
去 ( )寄存器查看结果
A、 AX B、BX C、DX D、 DX存放结果高16位,AX存放结果低16位
MOV AX,87
MOV BL,6
MUL BL
去 ( )寄存器查看结果
A、 AX
B、 BX
C、 AL
D、 DX存放结果高16位,AX存放结果低16位
DATA1 DB 1,2,3,4
DB 5,6,7,8
DB 9,10,11,12
DB 1,2,3,4
执行下列程序段
MOV BX,0
MOV SI,0
MOV CX,4
MOV AL,0
S: ADD AL,DATA1[BX][SI]
INC SI
ADD BX,4
LOOP S
AL寄存器的结果是( )
A、 10 B、 16 C、 24 D、 22
DATA1 DB 1,2,3,4
DB 5,6,7,8
DB 9,10,11,12
DB 1,2,3,4
执行下列程序段
MOV BX,0
MOV SI,0
MOV CX,4
MOV AL,0
S: ADD AL,DATA1[BX][SI]
INC SI
INC BX
LOOP S
AL寄存器的结果是( )
A、 10 B、 16 C、 24 D、 22
DATA1 DB 1,2,3,4
DB 5,6,7,8
DB 9,10,11,12
DB 1,2,3,4
执行下列程序段
MOV BX,0
MOV SI,0
MOV CX,4
MOV AL,0
S: ADD AL,DATA1[BX+SI]
ADD AL,DATA1[BX+4+SI]
INC SI
LOOP S
AL寄存器的结果是( )
A、 10 B、 16 C、 52 D、 36
X DW 5 DUP (1,2,3)
A、 总共定义了15个字节 B、 总共定义了3个字节
C、 总共定义了5个字节 D、 总共定义了30个字节
X DB 3 DUP (1,2 DUP(3))
A、 相当于 X DB 1,2,3
B、 相当于 X DB 1,2,3,1,2,3,1,2,3
C、 相当于 X DB 1,3,3,1,3,3,1,3,3
D、相当于 X DB 1,2,2,1,2,2,1,2,2
X DW 5 DUP (1,3 dup(2))
A、 总共定义了10个字节 B、 总共定义了20个字节
C、 总共定义了30个字节 D、 总共定义了40个字节
A. push IP ; jmp far ptr 标号
B. push CS ; push IP ; jmp far ptr 标号
C. push IP ; jmp near ptr 标号
D. push CS ; push IP ; jmp near ptr 标号
mov ax,4
call s
nop
S:
mov ax,offset s
mov bp,sp
sub ax,[bp]
A.0 B.1 C.2 D.3
A. 编译 B. 连接 C. 运行 D. 编译或运行
A. jmp ax B. jmp far ptr s C. loop D. ret
A.IP B. BP C.CS D.CS和IP
A.jmp B.jcxz C.loop D.je
popf
pop cs
pop ip
add al,0ffh
上面两条指令执行后,(AX)=0
A.loop指令的跳转范围是-128~127
B.CX=10时,执行loop指令,IP的值一定减小
C.CX=0时,执行loop指令后,CX=0ffffh
D.CX=1时,执行loop指令,IP的值不变
A.iret B.jmp 标号 C.retf D.call 标号
1000:0000 69 76 65 20 25 63 20 61-6E 64 20 70 72 65 73 73
1000:0010 20 3C 45 4E 54 45 52 3E-0A 00 6B 00 41 62 6F 75
1000:0020 74 20 74 6F 20 67 65 6E-65 72 61 74 65 20 2E 45
接着,即写且执行以下指令:
mov ax,1000
mov ds,ax
jmp far [2]
之后,cs:ip的值依次是( )。
A.6325:2065 B.6520:2563 C.2065:7669 D.6520:2567
A.进行段内短转移时,jmp指令对应的机器码中没有转移的目的地址。
B.进行段间转移时,jmp指令对应的机器码中有转移的目的地址。
C.进行段内短转移时,IP的修改范围是0~255。
D.loop指令也是转移指令。
A.push B.pushf C.ret D.mov
内存地址 汇编指令
076e:0 mov ax,5
076e:3 call ax
076e:5 inc ax
076e:6 mov bp,sp
076e:8 jmp word ptr [bp]
A.循环执行mov ax,5 和call ax
B.循环执行call ax到jmp word ptr [bp]
C.循环执行inc ax到jmp word ptr [bp]
D.ss:bp指向处的数据未知,因而跳转到未知内存处,结果不可预测
A.6669 6573 B.6966 6965 C.7365 6966 D.1000 0012
assume cs:code
data segment
dd 4 dup (0)
data ends
code segment
s:
mov ax,4c00h
int 21h
code ends
assume cs:a
a segment
start:
_____________
a ends
end start
A.jmp s B.loop s C.jmp far ptr s D.jmp near ptr s
sub ax,ax
retf
A.1 B.2 C.3 D.4
①从CS:IP指向的内存空间读取指令,将指令放入指令缓冲器
②执行指令,转到步骤①
③IP指向下一条指令
A.① ②
B.① ③ ②
C.若指令是转移指令,过程为① ③ ②,不是则过程为① ②
D.若指令是转移指令,过程为① ②,不是则过程为① ③ ②
DATA SEGMENT
X1 DB 5 DUP (1,2,3)
X2 DW 1
X3 DW 1000H
DATA ENDS
执行下面的程序段后,CX的值为( )
MOV AX,DATA
MOV DS,AX
MOV CX,OFFSET X3
A、 15
B、 16
C、 17
D、 18
用Debug查看内存,结果如下:
2000:1000 04 05 60 BE 00 06 00 00 00 ……
则此时,CPU执行指令:
mov ax,2000H
mov es,ax
jmp dword ptr es:[1002H]
后,说法正确的是( )
A、 (CS)=2000H,(IP)=1002h
B、 (CS)=BE60H,(IP)=0600H
C、 (CS)=60BEH,(IP)=0006H
D、 (CS)=0600H,(IP)=BE60H
DATA SEGMENT
X1 DB 5 DUP (1,2,3)
X2 DW 1
X3 DW 1000H
DATA ENDS
执行下面的程序段后,CX的值为( )
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET X3
MOV CX,[BX]
A、 18
B、 17
C、 1
D、 1000H
A、 执行该指令,修改CS和IP一次
B、 执行该指令,修改IP一次
C、 执行该指令,修改IP两次
D、 执行该指令,修改IP三次
A、 执行该指令,(IP)=(IP)+8位位移量
B、 执行该指令,(IP)=(IP)+16位位移量
C、 执行该指令,(IP)=(IP)+标号所在段中的偏移地址
D、 执行该指令,(IP)=标号所在段中的偏移地址
A、 执行该指令,(IP)=(IP)+8位位移量
B、 执行该指令,(IP)=(IP)+16位位移量
C、 执行该指令,(IP)=(IP)+标号所在段中的偏移地址
D、 执行该指令,(IP)=标号所在段中的偏移地址
A、 执行该指令,(IP)=(IP)+8位位移量
B、 执行该指令,(IP)=(IP)+16位位移量
C、 执行该指令,(IP)=(IP)+标号所在段中的偏移地址
D、 执行该指令,(IP)=标号所在段中的偏移地址
A、 JMP AX
B、 JMP FAR PTR S1
C、 JMP DWORD PTR DS:[0]
D、 JMP DWORD PTR [BX]
A、 JMP AX
B、 JMP NEAR PTR S1
C、 JMP WORD PTR DS:[0]
D、 JMP DWORD PTR [BX]
mov ax,0
push ax
popf
mov ax,0ffffh
inc ax
A. of=0,cf=0 B. of=1,cf=0 C. of=0,cf=1 D. of=1,cf=1
mov ax,0ea04h
sub ax,4ae0h
A. 0,1,0,1 B. 1,1,0,0 C. 1,0,0,0 D. 1,0,1,0
A.PUSHF B.MOV AX,AX C.SHL AX,CL D.JCXZ
A.je next B.in al,20h C.puah ax D.shl ax,1
A.adc ax,bx B.cmp cx,ax C.inc ax D.jmp word ptr [bx]
A.sti B.cld C.std D.shr
add al,63h
这两条指令执行后,cf\of的值是( )。
A. cf=0,of=0 B. cf=0,of=1 C. cf=1,of=0 D. cf=1,of=1
A.CF=1且ZF=1 B.CF=0或ZF=1 C.CF=0或ZF=0 D.CF=0
mov ax,0ff80h
add al,0f0h
A.pf=1 sf=1 cf=1 of=1 B.pf=0 sf=1 cf=1 of=1
C.pf=0 sf=0 cf=1 of=1 D.pf=1 sf=0 cf=0 of=0
A.标志寄存器可以通过栈指令访问
B.当al=0ffh,执行“inc al”,将影响cf的值
C.算数运算指令不会影响df标志位
D.根据无符号数的比较结果进行转移的条件转移指令,检测的是zf.cf的值
add al,127
这两条指令执行后,OF=1,发生溢出;虽然逻辑结果为正,但SF却为1
add al,0ffh
这两条指令执行后,OF=0,CF=1
cmp ax,5
jb s
int 21h
这段程序执行过程中,SF一直为1
A.int 21h B.jmp ax C.cmp ax,bx D.sub ax,ax
A.OF=1,CF=0 B.OF=0,CF=0 C.OF=0,CF=1 D.OF=1,CF=1
A.mov ax,1 B.mov ax,1 C.mov ax,1 D.mov ax,1
add ax,2 and ax,0 sub ax,2 or ax,0
A.mov al,98 B.mov al,0f0H C.mov al,0f0H D.mov al,68H
add al,99 add al,88H add al,78H add al,1
A.只用一条movsb指令,即可以将一个内存单元里的数据传送到另一个内存单元
B.movsb指令执行后,SI与DI的值可能会增加,也可能会减小
C.传送可以以字节为单位进行,也可以以字为单位进行
D.如果在执行“movsb”之前,CX的值是10,“movsb”将重复执行10次
A.标志寄存器是16位的
B.无法通过一条汇编指令将标志寄存器的所有位都更新
C.这个寄存器中的有些位没有任何含义
D.cmp指令能够改变标志寄存器的值
A. 中断类型码 B. 中断处理程序的入口地址
C. 中断处理程序 D. 断点地址
A. 1 B. 2 C. 3 D. 4
mov al,00000001B
mov cx,109h
shl al,cl
A. 29 ,1 B. 29 ,0 C. 0,1 D. 0,0
A.shl ax,3 B.shr ax,3
C.MOV CL,3 D.mov cl,3
SHL AX,CL shr ax,cl
A.shl用0补充最高位。
B.shr将一个寄存器或内存单元中的数据向左移动。
C.移出的bit的值是0,shl与shr不影响CF。
D.shr用0补充最高位。
A. shl ax,1
mov bx,ax
mov cl,2
shl ax,cl
add ax,bx
B. mov bx,ax
shl ax,1
shl bx,1
shl bx,1
add ax,ax
add ax,bx
C. mov bx,ax
mov cl,3
shl ax,cl
shl bx,1
add ax,bx
D. mov cl,3
shl ax,cl
mov bx,ax
mov cl,2
shr bx,cl
add ax,bx
A.1 B.2 C.3 D.4
A.中断类型码 B.断点地址 C.中断处理程序 D.中断处理程序的入口地址
A. mul 2 B. mul ax,2 C. shl ax,1 D. shr ax,1
A. inc cx,1 B. shl ax,2 C. and [bp],al D. mov [bx][bp],ax
A.可触发单步中断 B.将执行完整个程序 C.只能执行一条指令
D.在依次执行完“mov ax,4c00h”、“int 21h”这两条指令后,程序返回
int 21h
这段程序的作用是( )。
A.可用这段代码读取CMOS中的年份信息
mov al,9
in 70h,al
out al,71h
B.在移位指令中,可以用bl存储大于1的移位数
C.用shl指令对al进行移位,要注意对ah的值的影响
D.十进制数码的ASCII码=十进制数码的BCD码+30h
E.后面有“:”的地址标号能够写在所有段内
F.数据标号只能写在数据段内
二.用一条指令写出实现下列指明的功能
三.程序分析
assume cs:code
code segment
start: mov ax,2
mov cx,_____
s: add ax,ax
loop s
mov ax,4c00h
int 21h
code ends
end start
assume cs:code
code segment
start: mov ax,2
mov bx,2
mov cx,0
s: add ax,bx
loop s
mov ax,4c00h
int 21h
code ends
end start
A. 2 B. 4 C. 0FFFEH D. 0FFFCH
mov ax,1000H
mov ds,ax
mov bx,0000H
mov ax,3e88H
mov [bx],ax
inc bx
inc bx
mov [bx],ah
mov ah,0
inc bx
mov [bx],ax
inc bx
mov [bx],ax
mov ax,ds:[1]
inc bx
inc bx
mov [bx],ax
A.88H,3eH,3eH,88H,88H,00H,3eH
B.88H,3eH,3eH,88H,00H,88H,00H
C.88H,3eH,3eH,88H,00H,3eH,3eH
D.88H,3eH,3eH,88H,88H,3eH,3eH
Mov ax,0010h
Mov bx,1000h
___________
___________
A.Sub bx,2000h B.Sbb bx,2000h
Sub ax,0020h Sub ax,0020
C.Sub bx,2000h D.Sbb bx,2000h
Sbb ax,0020h Sbb ax,0020h
ASSUME CS:CODE,ES:DATA
DATA SEGMENT
STR DB 'NULL POINTER ASSIGNMENT.'
DATA ENDS
CODE SEGMENT
SUM DW 0
START:MOV AX,DATA
MOV ____,AX
MOV SI,0
MOV CX,24
S:MOV AL,STR[SI]
ADD ____,AL
ADC BYTE PTR SUM[1],0
LOOP S
MOV AX,4C00H
INT 21H
CODE ENDS
END START
A.ds,SUM[2] B.es,SUM[2]
C.es,byte ptr SUM[0] D.ds,byte ptr SUM[0]
ASSUME CS:CODE
DATA SEGMENT
DB "heLLo"
DATA ENDS
CODE SEGMENT
START:MOV AX,DATA
MOV DS,AX
MOV BX,0
MOV CX,5
S:ADD BYTE PTR [BX],00100000B
AND BYTE PTR [BX],_________
OR BYTE PTR [BX],01000000B
INC BX
LOOP S
MOV AX,4C00H
INT 21H
CODE ENDS
END START
A.01h B.00h C.80h D.7fh E.前几个选项都不对
mov ax,1000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s: mov al,0
________
cmp al,16
________
cmp al,64
________
inc dx
s0: inc bx
loop s
E. 前几个选项都不对。
assume cs:code,ds:data
data segment
db 'assembly'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,___
mov ax,0
mov es,ax
mov di,___
mov cx,___
std
rep movsw
mov ax,4c00h
int 21h
code ends
end start
A.6,206h,4
B.8,208h,4
C.0,200h,8
D.0,200h,4
mov ax,2
mov cx,___
s: add ax,ax
loop s
A.8 B.9 C.10 D.11
mov ax,0
push ax
popf
mov ax,0fff0h
add ax,88h
pushf
pop ax
and al,11000101b
and ah,10001000b
参考.标志寄存器
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
OF |
DF |
IF |
TF |
SF |
ZF |
AF |
PF |
CF |
A. 1h B. 804h C. 5h D. 前三个选项都不对
assume cs:code
stack segment
db 16 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,sp
push cs
call s
sub ax,sp
s:pop ax
mov ax,4c00h
int 21h
code ends
end start
这个程序加载到内存后,其一段程序所在的内存空间的情况如下:
内存地址 机器码 所对应的源程序中的指令
1000:0008 8BC4 mov ax,sp
1000:000A 0E push cs
1000:000B E80200 call s
1000:000E 2BC4 sub ax,sp
1000:0010 58 s:pop ax
执行这个程序,“pop ax”执行后,ax的值为( )。
A. 8h B. 0bh C. 0eh D. 1000h E. 2 F. 10h
assume cs:code
code segment
start: mov ax,333
push ax
mov ax,345
push ax
call calc
mov ax,4c00h
int 21h
calc: push bp
mov bp,sp
mov ax,_____
sub ax,_____
mov bp,ax
mul bp
pop bp
ret 4
code ends
end start
A.[bp+6],[bp+8] B.[bp+4],[bp+6]
C.[bp+2],[bp+4] D.[bp+4],[bp+2]
mov ax,0f123h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s: mov al,[bx]
cmp al,15
_________
cmp al,100
_________
inc dx
s0:inc bx
loop s
A. jna s0,jnb s0 B. ja s0,jb s0
C. jnb s0,jna s0 D. jna s0,ja s0
mov cx,2
s: mov ax,bx
loop s
A. 3 B. 5 C. 6 D. 7 E. 8 F. 9
2000:0200 00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F
2000:0210 10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F
下面的程序执行后,ax、cx、dx中的内容依次是( )。
mov ax,1fffh
mov ds,ax
mov ss,ax
mov bx,210h
mov sp,bx
mov ax,[bx]
mov cx,[bx+12h]
pop dx
A.未知,未知,未知 B.0100h,1312h,未知
C.0001h,1213h,1415h D.0100h,1312h,0100h
assume cs:code,ds:data
data segment
a dw 1,2,3,4,5,6,7,8
b dd 0
c dw a,b
data ends
code segment
.......
mov ax,4c00h
int 21h
code ends
end start
A. start: mov ax,data
mov ds,ax
mov si,0
mov cx,8
s: mov ax,a[si]
add b[0],ax
adc b[2],ax
add si,2
loop s
B. start: mov si,0
mov cx,8
s: mov ax,a[si]
add word ptr b[0],ax
adc word ptr b[2],0
add si,1
loop s
C. start: mov ax,seg a
mov ds,ax
mov si,0
mov cx,8
s: mov ax,a[si]
mov bx,offset b
add word ptr[bx],ax
adc word ptr 2[bx],0
add si,2
loop s
D. start: mov ax,data
mov ds,ax
mov si,0
mov cx,8
s: mov ax,a[si]
mov bx,word ptr c[0]
add word ptr [bx],ax
mov bx,word ptr c[2]
adc word ptr[bx],0
add si,2
loop s
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
mov cx,12
call capital
mov ax,4c00h
int 21h
capital:
......
code ends
end start
A. or byte ptr [si],00100000b
inc si
loop capital
ret
B. mov cl,[si]
mov ch,0
jcxz ok
sub word ptr [si],20h
inc si
inc si
jmp short capital
ok: ret
C. mov cl,11011111b
s: push cx
and byte ptr [si],cl
inc si
pop cx
loop s
ok: ret
D. mov cl,[si]
mov ch,0
inc cx
loop ok
ret
ok: and byte ptr [si],11011111b
inc si
jmp capital
assume cs:code
code segment
mov ax,4c00h
int 21h
start:
nop
nop
push cs
pop ds
mov si,offset o
mov di,offset start
mov ax,ds:[si]
mov ds:[di],ax
mov cx,-2
s:
_____________
jcxz start
o: loop s
code ends
end start
A.add cx,2(机器码:83H C1H 02H)
B.add cx,1(机器码:83H C1H 01H)
C.inc cx(机器码:41H)
D.以上都不对
1100:F000 BE 00 06 00 6A 22
MOV AX,2000H
MOV DS,AX
MOV BX,0000H
MOV SI,0
MOV AX,2[BX][SI]
INC SI
ADD AX,2[BX][SI]
INC SI
MOV DI,SI
SUB AX,2[BX][DI]
A.9c06h B.479ch C.7006h D.8c70h
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax,0
1000:3 e8 01 00 call s
1000:6 40 inc ax
1000:7 58 s:pop ax
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax,0
1000:3 9a 09 00 00 10 call far ptr s
1000:8 40 inc ax
1000:9 58 s:pop ax
add ax,ax
pop bx
add ax,bx
内存地址 机器码 汇编指令
1000:0 b8 06 00 mov ax,6
1000:2 ff d0 call ax
1000:5 40 inc ax
1000:6 mov bp,sp
add ax,[bp]
assume cs:code
data segment
?
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
jmp word ptr [bx+1]
code ends
end start
若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?
assume cs:code,ds:data
data segment
dd 12345678h
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov [bx],_______
mov [bx+2],_________
jmp dword ptr ds:[0]
code ends
end start
补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。
2000:1000 BE 00 06 00 00 00 ......
则此时,CPU执行指令:
mov ax,2000H
mov es,ax
jmp dword ptr es:[1000H]
后,(CS)=? , (IP)=?
mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s:mov al,[bx]
cmp al,32
_________
cmp al,120
__________
inc dx
s0:inc bx
loop s
mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s:mov al,[bx]
cmp al,32
__________
cmp al,120
___________
inc dx
s0:inc bx
loop s
实验1~实验九