编写包含多个功能子程序的中断例程。
安装一个新的int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写。
1.编程前了解以下各信息:
(1)逻辑扇区编号的取值范围:[0,2879D]
(2)逻辑扇区号与物理扇区号的对应关系:逻辑扇区号=(面号*80+磁道号)*18+扇区号-1
面号=磁头号=int(逻辑扇区号/(1440))
磁道号=int((rem(逻辑扇区号/1440))/18)
扇区号=rem((rem(逻辑扇区号/1440))/18)+1
(3)int 7ch参数说明:
ah寄存器传递功能号:0表示读,1表示写;
bx寄存器传递要读写的扇区的逻辑扇区号;
用...


- [游客] 可以用耶! 11/23 11:31
- [harryxiyou] 好样的,我一直最喜欢汇编,应该叫 ASSEMBLY LANGUAGE,更贴切,哈哈。 08/17 16:16
- [till] 唉 哪是总结哦 就是抄一遍而已 “应的机器码:E9 disp ” 明显的错误都发现不了 07/17 15:49
- [zouhehui] 写的非常好,佩服! 11/29 11:21
- [hs1024] 支持··来向你学习 07/14 14:01
- [游客] 谢谢博主 11/28 00:48
- [mouselove] 偏移地址是16位寄存器,它的取值范围是0000H~FFFFH 11/16 15:41
- [游客] 不好意思,这个问题很愚蠢,偏移地址可以为零。 11/16 14:52
- [mwh1987] 有一个问题:偏移地址能否为零? 11/16 10:21
- [游客] 谢谢您的帮助,谢谢!! 08/24 14:43
- [游客] [url=http://www.gddzbq.com]深圳搬家公司[/url] [url=http 03/02 15:09
- [nono] 博主是高手啊 经验丰富 我目前上大学,刚刚接触汇编 以后还请博主多多指教 11/25 16:32
- [sirius] 你好啊 我也是刚看 王爽老师的 汇编语言 但是有些地方还是很模糊 你还有什么更直接的联系 06/06 19:29
- [游客] 你好啊 我也是刚看 王爽老师的 汇编语言 但是有些地方还是很模糊 你还有什么更直接的联系方式 06/06 10:28
- [color] 像你学习! 05/11 19:30
- [sirius] 你喜欢它,就会觉得好玩,如果你怕它,就会觉得枯燥,我一开始很怕它,现在不怕了,嘿嘿 04/22 22:49
- [wuerlang] 真的勇士,敢于直面枯燥的汇编 ------- 其实汇编很有趣,也好玩的。 04/22 08:33
[2008-05-23 17:38] 实验17
阅读全文 |
评论次数(3) |
浏览次数(1348) |
所属类型(汇编作业)
[2008-05-19 19:00] 检测点17.1
“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?
分析一个例子,int 16h中断例程中的0号功能是从键盘缓冲区中读取一个键盘输入,如果键盘缓冲区中是空的,那么会循环等待,直到缓冲区有数据为止,所以我想CPU是不会让这种死循环的情况发生的,它至少可以在int 16h中断例程中响应int 9中断,以便给键盘缓冲区填入数据。在进入int 16h中断例程前IF和TF都置0了,所以在进入int 16h中断例程后,为了能及时响应int 9中断,应该是有指令将IF设置为1来恢复响应可屏蔽中断。...
分析一个例子,int 16h中断例程中的0号功能是从键盘缓冲区中读取一个键盘输入,如果键盘缓冲区中是空的,那么会循环等待,直到缓冲区有数据为止,所以我想CPU是不会让这种死循环的情况发生的,它至少可以在int 16h中断例程中响应int 9中断,以便给键盘缓冲区填入数据。在进入int 16h中断例程前IF和TF都置0了,所以在进入int 16h中断例程后,为了能及时响应int 9中断,应该是有指令将IF设置为1来恢复响应可屏蔽中断。...
阅读全文 |
评论次数(2) |
浏览次数(1234) |
所属类型(汇编作业)
[2008-05-19 14:08] 实验16
编写包含多个功能子程序的中断例程
安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序:
(1)清屏
(2)设置前景色
(3)设置背景色
(4)向上滚动一行
入口参数说明:
(1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行;
(2)对于2、3号功能,用al传送颜色值,(al)取值范围为[0,1,2,3,4,5,6,7]
1.编程思考:
(1)参考教材16.4节中的相关内容,读懂四个子程序的功能,然后编写int 7ch中断例程的安装程序。int 7ch中断例程的编写中,要注意定址表table中的各...
安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序:
(1)清屏
(2)设置前景色
(3)设置背景色
(4)向上滚动一行
入口参数说明:
(1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行;
(2)对于2、3号功能,用al传送颜色值,(al)取值范围为[0,1,2,3,4,5,6,7]
1.编程思考:
(1)参考教材16.4节中的相关内容,读懂四个子程序的功能,然后编写int 7ch中断例程的安装程序。int 7ch中断例程的编写中,要注意定址表table中的各...
阅读全文 |
评论次数(2) |
浏览次数(1293) |
所属类型(汇编作业)
[2008-05-13 10:34] 16.3节利用直接定址表显示sin(x)值完整程序
利用直接定址表显示sin(x)值完整程序如下:
assume cs:code
code segment
start: mov ax,120;ax赋值范围为[0,30,60,90,120,150,180]
call showsin
mov ax,4c00h
int 21h
showsin:jmp short show
ag dw 0,30,60,90,120,150,180;角度取值范围列表
table dw ag0,ag30,ag60,ag90,ag120,ag150,ag180
;字符串偏移地址表
ag0 db '0',0
a...
assume cs:code
code segment
start: mov ax,120;ax赋值范围为[0,30,60,90,120,150,180]
call showsin
mov ax,4c00h
int 21h
showsin:jmp short show
ag dw 0,30,60,90,120,150,180;角度取值范围列表
table dw ag0,ag30,ag60,ag90,ag120,ag150,ag180
;字符串偏移地址表
ag0 db '0',0
a...
阅读全文 |
评论次数(1) |
浏览次数(1260) |
所属类型(汇编作业)
[2008-05-11 22:02] 检测点16.1、16.2
检测点16.1
下面和程序将code段中a处的8个数据累加,结果存储到b处的dword中,补全程序。
assume cs:code
code segment
a dw 1,2,3,4,5,6,7,8
b dd 0
start: mov si,0
mov cx,8
s: mov ax,a[si]
add word ptr b,ax;等同于add word ptr [b],ax
adc word ptr b+2,0;等同于add word ptr [b+2],ax
add si,2
loop s
mov ax,4c00h
int 21h
co...
下面和程序将code段中a处的8个数据累加,结果存储到b处的dword中,补全程序。
assume cs:code
code segment
a dw 1,2,3,4,5,6,7,8
b dd 0
start: mov si,0
mov cx,8
s: mov ax,a[si]
add word ptr b,ax;等同于add word ptr [b],ax
adc word ptr b+2,0;等同于add word ptr [b+2],ax
add si,2
loop s
mov ax,4c00h
int 21h
co...
阅读全文 |
评论次数(7) |
浏览次数(1144) |
所属类型(汇编作业)
[2008-05-10 12:29] 实验15
安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”;其他的键照常处理。
1.实验前的准备工作:
(1)安装vFloppy,使机器启动时能选择进入DOS实模式,因为本程序运行后在DOS保护模式下会看不到预期效果。
(2)仔细分析教材中例题,了解原int 9中断例程入口地址及新编int 9中断例程入口地址的设置及保存。在新编的中断例程中要调用原中断例程以处理其他键产生的中断过程,只是当检测到“A”的断码时才跳转运行满屏显示“A”的语句。
(3)当扫描码为“A”的断码时,显示满屏幕的“A”,“A”的通码为1eh,所以断码=1eh...
1.实验前的准备工作:
(1)安装vFloppy,使机器启动时能选择进入DOS实模式,因为本程序运行后在DOS保护模式下会看不到预期效果。
(2)仔细分析教材中例题,了解原int 9中断例程入口地址及新编int 9中断例程入口地址的设置及保存。在新编的中断例程中要调用原中断例程以处理其他键产生的中断过程,只是当检测到“A”的断码时才跳转运行满屏显示“A”的语句。
(3)当扫描码为“A”的断码时,显示满屏幕的“A”,“A”的通码为1eh,所以断码=1eh...
阅读全文 |
评论次数(6) |
浏览次数(1432) |
所属类型(汇编作业)
[2008-05-09 14:34] 检测点15.1
1.仔细分析一下int9中断例程,看看是否可以精简一下?
说明:运行call dword ptr ds:[0]指令进入原int 9的中断例程,进入后会将IF和TF置0。调用原int 9中断例程是要对我们所不关心的一些硬件细节进行处理,这些处理连同将IF和TF置0都一起进行了,所以在新编的int 9中断例程中可以省略对IF和TF置0的语句。
对于程序段:
pushf
pushf
pop ax
and ax,11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:
pushf
call dword ptr ds:[0...
说明:运行call dword ptr ds:[0]指令进入原int 9的中断例程,进入后会将IF和TF置0。调用原int 9中断例程是要对我们所不关心的一些硬件细节进行处理,这些处理连同将IF和TF置0都一起进行了,所以在新编的int 9中断例程中可以省略对IF和TF置0的语句。
对于程序段:
pushf
pushf
pop ax
and ax,11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:
pushf
call dword ptr ds:[0...
阅读全文 |
评论次数(1) |
浏览次数(499) |
所属类型(汇编作业)
[2008-05-06 14:17] 实验14
实验14
编程:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
程序1:program1.asm
assume cs:code,ds:data
data segment
db 9,8,7,4,2,0;CMOS RAM中用于存放
年月日时分秒信息的单元号
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov si,0
mov di,0
mov cx,6
print_tim...
编程:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
程序1:program1.asm
assume cs:code,ds:data
data segment
db 9,8,7,4,2,0;CMOS RAM中用于存放
年月日时分秒信息的单元号
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov si,0
mov di,0
mov cx,6
print_tim...
阅读全文 |
评论次数(1) |
浏览次数(623) |
所属类型(汇编作业)
[2008-05-05 19:12] 检测点14.2
编程:用加法和移位指令计算(ax)=(ax)*10
assume cs:code
code segment
start: mov ax,2008;支持奥运
mov bx,ax
shl bx,1;bx暂存ax左移1位的结果
mov cl,3
shl ax,cl;ax值左移3位
add ax,bx
mov ax,4c00h
int 21h
code ends
end start
说明:根据提示(ax)*10=(ax)*2+(ax)*8,即是说将ax值左移1位加上ax值左移3位的值就是所要结果。程序中通过bx暂存了左移1位后的值。给ax赋初值有...
assume cs:code
code segment
start: mov ax,2008;支持奥运
mov bx,ax
shl bx,1;bx暂存ax左移1位的结果
mov cl,3
shl ax,cl;ax值左移3位
add ax,bx
mov ax,4c00h
int 21h
code ends
end start
说明:根据提示(ax)*10=(ax)*2+(ax)*8,即是说将ax值左移1位加上ax值左移3位的值就是所要结果。程序中通过bx暂存了左移1位后的值。给ax赋初值有...
阅读全文 |
评论次数(1) |
浏览次数(610) |
所属类型(汇编作业)
[2008-05-05 17:15] 检测点14.1
1.编程:读取CMOS RAM的2号单元内容。
程序如下:
assume cs:code
code segment
start: mov al,2
out 70h,al
in al,71h
mov ax,4c00h
int 21h
code ends
end start
说明:通过教材了解CMOS RAM芯片的特点,该芯片有两个端口,地址分别为70h和71h,CPU通过这两个端口来读写CMOS RAM。其中70h为地址端口,存放要访问的CMOS RAM单元的地址,71h为数据端口,存放从选定的CMOS RAM单元中读取的数据或要写入的数据。
CPU对CM...
程序如下:
assume cs:code
code segment
start: mov al,2
out 70h,al
in al,71h
mov ax,4c00h
int 21h
code ends
end start
说明:通过教材了解CMOS RAM芯片的特点,该芯片有两个端口,地址分别为70h和71h,CPU通过这两个端口来读写CMOS RAM。其中70h为地址端口,存放要访问的CMOS RAM单元的地址,71h为数据端口,存放从选定的CMOS RAM单元中读取的数据或要写入的数据。
CPU对CM...
阅读全文 |
评论次数(2) |
浏览次数(562) |
所属类型(汇编作业)