汇编网首页登录博客注册
unixandlinux的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新评论
最新留言
好友圈
友情链接

[2023-09-04 11:23] 第 17 章 实验 17  编写包含多个功能子程序的中断例程

(一)程序说明:本程序必须在纯 DOS 环境运行,因为 int 13h 中断例程只能在纯 DOS 环境运行。

(二)安装程序的代码
1. 参数说明:
(1) 用 AH 寄存器传递功能号:0 表示读,1 表示写。
由于要调用 BIOS 的 int 13h 中断例程,而 int 13h 中断例程的 AH 寄存器参数为:(ah)=2 或 (ah)=3。所以需要执行“add ah,2”指令,以转换 AH 寄存器存储的数据来适应 int 13h 中断例程的调用:
add ah,2  ; (ah)=0 或 (ah)=1,调用 BIOS 的 int 13h 中断时,(ah)=2 或 (ah)=...
阅读全文 | 评论次数(0) | 浏览次数(266) | 所属类型(课程实验)

[2023-08-27 20:49] 第 17 章 17.3 节示例

第 17 章 17.3 节示例

可运行的完整测试程序如下:

assume cs:code,ds:stack

; 声明字符栈
stack segment
  db 128 dup (0)
stack ends

code segment

start:        mov ax,stack
        mov ds,ax
        mov si,0

        mov dh,8  ; 行号:8
        mov dl,4  ; 列号:4
        call getstr

        mov ax,4c00h
        int 21h

getstr:  push ax

getstrs: mov ah,0 ...
阅读全文 | 评论次数(0) | 浏览次数(277) | 所属类型(示例演示)

[2023-08-26 11:36] 第 17 章 检测点 17.1

检测点 17.1

“在 int 16h 中断例程中,一定有设置 IF=1 的指令。”这种说法对吗?
答:正确。int 16h 中断例程的功能是读取键盘缓冲区的信息。当执行该中断例程时,如果键盘缓冲区为空,则该中断例程会处于循环执行状态(即循环检测键盘缓冲区是否存在可读取信息)以等待键盘缓冲区被写入信息;由于引发 int 16h 中断过程中,硬件已经自动执行了 IF=0,因此如果 int 16h 中断例程中没有设置 IF=1 的指令,那么一旦键盘缓冲区在执行 int 16h 中断例程之前的状态为空,使得 int 16h 中断例程处于等待键盘输入的状态,IF=0 会导致 CPU 无法响应 ...
阅读全文 | 评论次数(0) | 浏览次数(280) | 所属类型(汇编作业)

[2023-08-24 20:21] 第 16 章 实验 16  编写包含多个功能子程序的中断例程

实验 16 编写包含多个功能子程序的中断例程

安装一个新的 int 7ch 中断例程,为显示输出提供如下功能子程序。
(1) 清屏。
(2) 设置前景色。
(3) 设置背景色。
(4) 向上滚动一行。
入口参数说明如下:
(1) 用 AH 寄存器传递功能号:0 表示清屏,1 表示设置前景色,2 表示设置背景色,3 表示向上滚动一行。
(2) 对于 1、2 号功能,用 AL 寄存器传送颜色值,(al)∈{0,1,2,3,4,5,6,7}。

具体代码:
注意,以下最前面的两种错误代码,仅编写功能号 1 的子程序以作测试。

1. 错误代码:

assume cs...
阅读全文 | 评论次数(0) | 浏览次数(298) | 所属类型(课程实验)

[2023-08-19 21:01] 第 15 章 实验 15  安装新的 int 9 中断例程

实验 15 安装新的 int 9 中断例程

安装一个新的 int 9 中断例程。
功能:在 DOS 下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”,其他的键照常处理。
提示,按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。断码=通码+80h。

具体代码如下:

assume cs:code

stack segment
  db 128 dup (0)
stack ends

code segment

start:  mov ax,stack
     mov ss,ax
     mov sp,128

   ...
阅读全文 | 评论次数(0) | 浏览次数(489) | 所属类型(课程实验)

[2023-08-15 10:41] 第 14 章 实验 14  访问 CMOS RAM

实验 14 访问 CMOS RAM

编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
注意:CMOS RAM 中存储着系统的配置信息,除了保存时间信息的单元外,不要向其他的单元中写入内容,否则将引起一些系统错误。

具体代码如下:

assume cs:code

; sysdt 段中 '00/00/00 ' 和 '00:00:00' 的 '00' 部分,是需要写入的数据位置。
; 以 ASCII 码值 0 作为字符串结束符。
sysdt segment
  db  '20','00/00/00 ','00:00:00',0
sysdt ends
...
阅读全文 | 评论次数(0) | 浏览次数(319) | 所属类型(课程实验)

[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 ...
阅读全文 | 评论次数(0) | 浏览次数(397) | 所属类型(汇编作业)

[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 ...
阅读全文 | 评论次数(0) | 浏览次数(214) | 所属类型(汇编作业)

[2023-08-12 20:31] 第 13 章 实验 13  编写、应用中断例程

实验 13 编写、应用中断例程

一、编写并安装“int 7ch”指令所引发中断的中断例程,功能为显示一个用 0 结束的字符串,中断例程安装在内存地址 0:200 处。
参数:(dh)=行号,(di)=列号,(cl)=颜色,ds:si 指向字符串首地址。
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察 int、iret 指令执行前后 CS、IP 和栈的状态。
注意,“ds:si 指向字符串首地址”是作为参数向“int 7ch”指令所引发中断的中断例程提供的,可见该字符串并不在该中断例程程序代码之中,而是位于主调程序内。

assume cs:code

dat...
阅读全文 | 评论次数(0) | 浏览次数(143) | 所属类型(课程实验)

[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) 成为调用中断例程的参数。

应用举例:在屏幕的...
阅读全文 | 评论次数(0) | 浏览次数(157) | 所属类型(汇编作业)
『 查看更多文章 』