检测点 17.1
“在 int 16h 中断例程中,一定有设置 IF=1 的指令。”这种说法对吗?
答:正确。int 16h 中断例程的功能是读取键盘缓冲区的信息。当执行该中断例程时,如果键盘缓冲区为空,则该中断例程会处于循环执行状态(即循环检测键盘缓冲区是否存在可读取信息)以等待键盘缓冲区被写入信息;由于引发 int 16h 中断过程中,硬件已经自动执行了 IF=0,因此如果 int 16h 中断例程中没有设置 IF=1 的指令,那么一旦键盘缓冲区在执行 int 16h 中断例程之前的状态为空,使得 int 16h 中断例程处于等待键盘输入的状态,IF=0 会导致 CPU 无法响应 ...
[2023-08-26 11:36] 第 17 章 检测点 17.1
阅读全文 |
评论次数(0) |
浏览次数(293) |
所属类型(汇编作业)
[2023-08-14 18:42] 第 14 章 检测点 14.2
检测点 14.2
编程,用加法和移位指令计算 (ax)=(ax)*10。提示,(ax)*10=(ax)*2+(ax)*8。
具体代码如下:
1. 说明:AX 寄存器存储的初始数据不得超过 6553,因为 6553×10=65530 是 16 位寄存器 AX 能进行乘 10 计算后所存储的最大值,超过后就会由于 AX 寄存器的存储容量不足而导致溢出,所得的结果将是错误的。例如若计算 6554×10,结果为 65540,该数值在 AX 寄存器中实际存储的是其补码,即十进制的数值 4,因为 AX 寄存器最大能存储的无符号数为 65535。本程序代码只有计算功能,需通过 Debug ...
编程,用加法和移位指令计算 (ax)=(ax)*10。提示,(ax)*10=(ax)*2+(ax)*8。
具体代码如下:
1. 说明:AX 寄存器存储的初始数据不得超过 6553,因为 6553×10=65530 是 16 位寄存器 AX 能进行乘 10 计算后所存储的最大值,超过后就会由于 AX 寄存器的存储容量不足而导致溢出,所得的结果将是错误的。例如若计算 6554×10,结果为 65540,该数值在 AX 寄存器中实际存储的是其补码,即十进制的数值 4,因为 AX 寄存器最大能存储的无符号数为 65535。本程序代码只有计算功能,需通过 Debug ...
阅读全文 |
评论次数(0) |
浏览次数(412) |
所属类型(汇编作业)
[2023-08-13 18:22] 第 14 章 检测点 14.1
检测点 14.1
编程:读、写 CMOS RAM 的 2 号单元的内容
说明:1. CMOS RAM 芯片的端口是 8-bits 端口,要通过 AL 寄存器进行读写操作。
2. CMOS RAM 芯片端口的地址是 70H 和 71H,地址值范围在 255(0FFh)以内,所以在 int、out 指令中使用 CMOS RAM 芯片端口时,直接书写其端口号 70H 或 71H。
3. CMOS RAM 的 2 号单元存储的是系统时间的分钟数:如果当前系统时间是 17:32,则 2 号单元存储的数据就是 32H —— 注意,不会将分钟数转换为 16 进制数,而是直接的 16 ...
编程:读、写 CMOS RAM 的 2 号单元的内容
说明:1. CMOS RAM 芯片的端口是 8-bits 端口,要通过 AL 寄存器进行读写操作。
2. CMOS RAM 芯片端口的地址是 70H 和 71H,地址值范围在 255(0FFh)以内,所以在 int、out 指令中使用 CMOS RAM 芯片端口时,直接书写其端口号 70H 或 71H。
3. CMOS RAM 的 2 号单元存储的是系统时间的分钟数:如果当前系统时间是 17:32,则 2 号单元存储的数据就是 32H —— 注意,不会将分钟数转换为 16 进制数,而是直接的 16 ...
阅读全文 |
评论次数(0) |
浏览次数(236) |
所属类型(汇编作业)
[2023-08-10 09:15] 第 13 章 检测点 13.1
检测点 13.1
(1) 在上面的内容中,用 7ch 中断例程实现 loop 的功能,则上面的 7ch 中断例程所能进行的最大转移位移是多少?
答:由于存储位移数据的是 16 位的 BX 寄存器,而压栈后,栈元素也是 16 位的字内存单元,16 位存储空间所能存储的有符号数范围是 -32768~32767,因此最大位移就是 32767 字节(Byte)和 -32768 字节(Byte)。
(2) 实现用 7ch 中断例程完成“jmp near ptr s”指令的功能,用 BX 寄存器向中断例程传送转移的位移值 —— (bx) 成为调用中断例程的参数。
应用举例:在屏幕的...
(1) 在上面的内容中,用 7ch 中断例程实现 loop 的功能,则上面的 7ch 中断例程所能进行的最大转移位移是多少?
答:由于存储位移数据的是 16 位的 BX 寄存器,而压栈后,栈元素也是 16 位的字内存单元,16 位存储空间所能存储的有符号数范围是 -32768~32767,因此最大位移就是 32767 字节(Byte)和 -32768 字节(Byte)。
(2) 实现用 7ch 中断例程完成“jmp near ptr s”指令的功能,用 BX 寄存器向中断例程传送转移的位移值 —— (bx) 成为调用中断例程的参数。
应用举例:在屏幕的...
阅读全文 |
评论次数(0) |
浏览次数(175) |
所属类型(汇编作业)
[2023-08-03 10:39] 第 12 章 检测点 12.1
检测点 12.1
(1) 用 Debug 查看内存,情况如下:
0000:0000 68 10 A7 00 8B 01 70 00-16 00 9D 03 8B 01 70 00
则 3 号中断源对应的中断处理程序的入口地址为:0070:018B
(2) 存储 N 号中断源对应的中断处理程序入口的偏移地址的内存单元的地址为:0000:(N×4)
存储 N 号中断源对应的中断处理程序入口的段地址的内存单元的地址为:0000:(N×4+2)
中断号 偏移地址 段地址 示例实际存储内容(以本题(1)为例)
0 0~1 2~3 00A7:1068...
(1) 用 Debug 查看内存,情况如下:
0000:0000 68 10 A7 00 8B 01 70 00-16 00 9D 03 8B 01 70 00
则 3 号中断源对应的中断处理程序的入口地址为:0070:018B
(2) 存储 N 号中断源对应的中断处理程序入口的偏移地址的内存单元的地址为:0000:(N×4)
存储 N 号中断源对应的中断处理程序入口的段地址的内存单元的地址为:0000:(N×4+2)
中断号 偏移地址 段地址 示例实际存储内容(以本题(1)为例)
0 0~1 2~3 00A7:1068...
阅读全文 |
评论次数(0) |
浏览次数(111) |
所属类型(汇编作业)
[2023-08-01 17:30] 第 11 章 检测点 11.4
检测点 11.4
下面的程序执行后,(ax)=?
mov ax,0
push ax
popf
mov ax,0FFF0h
add ax,0010h
pushf
pop ax
and al,11000101B
and ah,00001000B
分析:
1. 观察指令
mov ax,0
push ax
popf
这三条指令使得 flag 各位均为 0。
2. 观察指令
mov ax,0FFF0h
add ax,0010h
pushf
(ax)=FFF0h+0010h=(1)0000h,也即 (ax)=-16+16=0,这影响了 flag 的 OF、...
下面的程序执行后,(ax)=?
mov ax,0
push ax
popf
mov ax,0FFF0h
add ax,0010h
pushf
pop ax
and al,11000101B
and ah,00001000B
分析:
1. 观察指令
mov ax,0
push ax
popf
这三条指令使得 flag 各位均为 0。
2. 观察指令
mov ax,0FFF0h
add ax,0010h
pushf
(ax)=FFF0h+0010h=(1)0000h,也即 (ax)=-16+16=0,这影响了 flag 的 OF、...
阅读全文 |
评论次数(0) |
浏览次数(113) |
所属类型(汇编作业)
[2023-08-01 09:36] 第 11 章 检测点 11.3
检测点 11.3
(1) 补全下面的程序,统计 F000:0 处 32 个字节中,大小在 [32,128] 的数据的个数。
mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0 ; 将统计的结果存储在 DX 寄存器中
mov cx,32
s: mov al,[bx]
cmp al,32
jb s0 ; 小于 32 则跳至 s0 标号处执行,以进入下一个循环或结束循环
cmp al,128
ja s0 ; 大于 128 则跳至 s0 标号处执行,以进入下一个循环或结束循环
...
(1) 补全下面的程序,统计 F000:0 处 32 个字节中,大小在 [32,128] 的数据的个数。
mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0 ; 将统计的结果存储在 DX 寄存器中
mov cx,32
s: mov al,[bx]
cmp al,32
jb s0 ; 小于 32 则跳至 s0 标号处执行,以进入下一个循环或结束循环
cmp al,128
ja s0 ; 大于 128 则跳至 s0 标号处执行,以进入下一个循环或结束循环
...
阅读全文 |
评论次数(0) |
浏览次数(106) |
所属类型(汇编作业)
[2023-07-27 11:36] 第11章 检测点 11.2
检测点 11.2
写出下面每条指令执行后,ZF、PF、SF、CF、OF 等标志位的值。
CF OF SF ZF PF
sub al,al 0 0 0 1 1
结果 (al)=00000000B:进位 0,“假”;溢出 0,“假”;符号非负,“假”;零位“真”;“偶个 1”,“真”。
CF OF SF ZF PF
mov al,10H 0 0 0 1 1
mov 为传送指令,(al)=10h,flag 寄存器保持原值不变。
CF OF SF ZF PF
add al,90...
写出下面每条指令执行后,ZF、PF、SF、CF、OF 等标志位的值。
CF OF SF ZF PF
sub al,al 0 0 0 1 1
结果 (al)=00000000B:进位 0,“假”;溢出 0,“假”;符号非负,“假”;零位“真”;“偶个 1”,“真”。
CF OF SF ZF PF
mov al,10H 0 0 0 1 1
mov 为传送指令,(al)=10h,flag 寄存器保持原值不变。
CF OF SF ZF PF
add al,90...
阅读全文 |
评论次数(0) |
浏览次数(111) |
所属类型(汇编作业)
[2023-07-27 08:09] 第11章 检测点 11.1
检测点 11.1
写出下面每条指令执行后,ZF、PF、SF 等标志位的值。
sub al,al ZF=1 PF=1 SF=0
结果为 00000000B,因此 ZF=1(零标志为真),PF=1(含 0 个 1,即偶数个 1,奇偶标志为真),SF=0(结果为非负数,负数标志为假)。
mov al,1 ZF=1 PF=1 SF=0
mov 指令为传送指令,不影响标志寄存器的值,因此标志寄存器保持原来的数据不变。
因此,虽然结果为 00000001B,但仍然是 ZF=1(零标志为真),PF=1(含 0 个 1,即偶数个 1,奇偶标志为真),SF=0(结果为非负数,负数标志为假)。...
写出下面每条指令执行后,ZF、PF、SF 等标志位的值。
sub al,al ZF=1 PF=1 SF=0
结果为 00000000B,因此 ZF=1(零标志为真),PF=1(含 0 个 1,即偶数个 1,奇偶标志为真),SF=0(结果为非负数,负数标志为假)。
mov al,1 ZF=1 PF=1 SF=0
mov 指令为传送指令,不影响标志寄存器的值,因此标志寄存器保持原来的数据不变。
因此,虽然结果为 00000001B,但仍然是 ZF=1(零标志为真),PF=1(含 0 个 1,即偶数个 1,奇偶标志为真),SF=0(结果为非负数,负数标志为假)。...
阅读全文 |
评论次数(0) |
浏览次数(148) |
所属类型(汇编作业)
[2023-06-27 18:53] 第10章 检测点 10.5
检测点 10.5
(1) 下面的程序执行后,ax 中的数值为多少?(注意:用 call 指令的原理来分析结果,而不要在 Debug 中单步跟踪来验证结论;因为对于此程序,在 Debug 中单步跟踪的结果不能代表 CPU 的实际执行结果。)
assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0E...
(1) 下面的程序执行后,ax 中的数值为多少?(注意:用 call 指令的原理来分析结果,而不要在 Debug 中单步跟踪来验证结论;因为对于此程序,在 Debug 中单步跟踪的结果不能代表 CPU 的实际执行结果。)
assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0E...
阅读全文 |
评论次数(0) |
浏览次数(129) |
所属类型(汇编作业)