汇编网首页登录博客注册
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) | 浏览次数(279) | 所属类型(课程实验)

[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) | 浏览次数(308) | 所属类型(课程实验)

[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) | 浏览次数(508) | 所属类型(课程实验)

[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) | 浏览次数(338) | 所属类型(课程实验)

[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) | 浏览次数(155) | 所属类型(课程实验)

[2023-08-07 20:03] 第 12 章 实验 12  编写 0 号中断的处理程序

实验 12 编写 0 号中断的处理程序

编写 0 号中断的处理程序,使得在除法溢出发生时在屏幕中间显示字符串“divide error!”,然后返回 DOS 操作系统。
要求:仔细跟踪调试,在理解整个过程之前,不要进行后面课程的学习。

具体代码如下:
必须先执行安装 do0 程序的 do0.asm 程序代码,再执行会产生 0 号中断的 test.asm 测试程序代码。

一、不考虑中断处理程序的返回问题

1. 安装 do0 程序的程序代码:

assume cs:code

code segment

; do0 程序(0 号中断处理程序)的安装
sta...
阅读全文 | 评论次数(0) | 浏览次数(108) | 所属类型(课程实验)

[2023-08-02 15:51] 第 11 章 实验 11  编写子程序

实验 11 编写子程序

编写一个子程序,将包含任意字符,以 0 结尾的字符串中的小写字母转变成大写字母,描述如下:
1. 名称:letterc
2. 功能:将以 0 结尾的字符串中的小写字母转变成大写字母
3. 参数:ds:si 指向字符串首地址
注意需要进行转化的是字符串中的小写字母 a~z,而不是其他字符。

完整程序代码如下(Ubuntu 18.04 中的 DOSBox-X 无法运行,Windows 则 DOSBox 和 DOSBox-X 都可以运行):

assume cs:codesg

datasg segment
    db "Beginner's ...
阅读全文 | 评论次数(0) | 浏览次数(107) | 所属类型(课程实验)

[2023-07-07 12:34] 第10章 实验10 编写子程序

实验 10 编写子程序

本次实验将编写 3 个子程序。

一、显示字符串

这一子程序是个通用程序,用于实现显示字符串。程序提供灵活的调用接口,使调用者可以决定显示的位置(行,列)、内容和颜色。

子程序描述:

1. 名称:show_str

2. 功能:在指定的位置,用指定的颜色,显示一个用 0 结束的字符串。

3. 参数:(dh)=行号(取值范围 0~24),(dl)=列号(取值范围 0~79),(cl)=颜色
ds:si 指向字符串的首地址

4. 返回:无

5. 应用举例:在屏幕的 8 行 3 列,用绿色显示 data 段中的字符串。
...
阅读全文 | 评论次数(0) | 浏览次数(125) | 所属类型(课程实验)

[2023-06-25 17:01] 第9章 实验9 根据材料编程

实验 9 根据材料编程

80×25 彩色字符模式显示缓冲区(以下简称为显示缓冲区)的结构:
内存地址空间中,B8000H~BFFFFH 共 32KB 的空间,为 80×25 彩色字符模式的显示缓冲区。向这个地址空间写入数据,写入的内容将立即出现在显示器上。
内存地址空间 B8000H~BFFFFH,其段地址为 B0000H,偏移地址范围 8000H~FFFFH;可见偏移地址数量计算方法如下:
FFFFH-8000H+1=7FFFH+1=8000H=8×16³=2³×(2⁴)³=2³×2¹²=2¹⁵=2⁵×2¹⁰=2⁵KB=32KB
在 80×25 彩色字符模式下,显示器可以显示 ...
阅读全文 | 评论次数(0) | 浏览次数(107) | 所属类型(课程实验)

[2023-06-21 06:57] 第9章 实验8 分析一个奇怪的程序

实验 8 分析一个奇怪的程序

判断下面程序是否可以正确返回,并分析原因。

assume cs:codesg

codesg segment

    mov ax,4c00h
    int 21h

start:  mov ax,0

s:      nop
        nop

        mov di,offset s
        mov si,offset s2
        mov ax,cs:[si]
        mov cs:[di],ax

s0:     jmp short s

s1:     mov ax...
阅读全文 | 评论次数(0) | 浏览次数(125) | 所属类型(课程实验)
页码数(2):  1  2