安装一个新的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
push cs
pop ds
...


- [游客] mov cx,4c00h ______...... mov ax,4c00h 05/18 16:46
- [ly6465686] 对了, 我的作业怎么没有看到, 我是刚进入的, ,呵。 。 申请成为了学员,,大哥,你能不能带带我, 09/05 10:43
- [app] 逻辑正确,但是明显没经过调试。 08/30 21:20
- [app] 兄弟,你这程序开头少帖了一行,别的倒是很正确。 08/30 21:16
- [mouse] 计算机告诉好了答案了,我就不说了 ^_^ 08/25 09:32
- [xiaoqiang] 不错,博主继续。。 08/25 08:55
- [xiaomk7758] 呵呵 给ax赋个值容易看出执行结果是否正确 08/22 09:52
- [lwbfq] 没有问题,不过你是计算的16*10,问题中说的是ax的值*10,有点出入。 08/22 09:42
- [lwbfq] 正确。 08/22 09:35
- [xiaomk7758] 呵呵 对是CS 写错了 08/19 14:58
[2008-08-24 18:08] 第15章实验15 安装新的int 9中断例程
阅读全文 |
评论次数(1) |
浏览次数(729) |
所属类型(课程实验)
[2008-08-21 01:38] 第14章实验14 访问CMOS RAM
编程:以“年/月/日 时:分:秒的格式,显示当前的日期、时间。
assume cs:code
code segment
row:db 9,8,7,4,2,0
start:mov ax,cs
mov ds,ax
mov si,offset row
mov di,0
mov cx,6
s:push cx
mov al,[si]
out 70h,al
in al,71h
mov ah,al
...
assume cs:code
code segment
row:db 9,8,7,4,2,0
start:mov ax,cs
mov ds,ax
mov si,offset row
mov di,0
mov cx,6
s:push cx
mov al,[si]
out 70h,al
in al,71h
mov ah,al
...
阅读全文 |
评论次数(1) |
浏览次数(714) |
所属类型(课程实验)
[2008-08-19 18:02] 第13章实验13 编写、应用中断例程(3)
(3)下面的程序,分别在屏幕的第2、4、6、8行显示四句英文诗,补全程序。
assume cs:code
code segment
s1: db 'Good,btter,best,','$'
s2: db 'Never let it rest,','$'
s3: db 'Till good is better,','$'
s4: db 'And better,best.','$'
s : dw offset s1,offset s2,offset s3,offset s4
row:db 2,4,6,8
start:mov ax,cs
...
assume cs:code
code segment
s1: db 'Good,btter,best,','$'
s2: db 'Never let it rest,','$'
s3: db 'Till good is better,','$'
s4: db 'And better,best.','$'
s : dw offset s1,offset s2,offset s3,offset s4
row:db 2,4,6,8
start:mov ax,cs
...
阅读全文 |
评论次数(0) |
浏览次数(488) |
所属类型(课程实验)
[2008-08-19 16:46] 第13章实验13 编写、应用中断例程(2)
(2)编写并安装int 7ch中断例程,功能为完成loop指令的功能。
参数:(cx)=循环次数,(bx)=位移
以上中断例程安装完成功后,对下面的程序进行单步跟踪,尤其注意观察int ,iret指令执行前后CS,IP和栈中的状态。
在屏幕中间显示80个‘!’
assume cs:code
code segment
start:mov ax,0b800h
mov es,ax
mov di,160*12
mov bx,offset s-offset se
mov cx,80
s: mov byte ptr es:[d...
参数:(cx)=循环次数,(bx)=位移
以上中断例程安装完成功后,对下面的程序进行单步跟踪,尤其注意观察int ,iret指令执行前后CS,IP和栈中的状态。
在屏幕中间显示80个‘!’
assume cs:code
code segment
start:mov ax,0b800h
mov es,ax
mov di,160*12
mov bx,offset s-offset se
mov cx,80
s: mov byte ptr es:[d...
阅读全文 |
评论次数(0) |
浏览次数(467) |
所属类型(课程实验)
[2008-08-19 15:21] 第13章实验13 编写、应用中断例程(1)
(1)编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。
参数:(dh)=行号, (dl)=列号, (cl)=颜色, ds:si指向字符串首地址
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int、iret指令执行前后CS、IP和栈中的状态。
assume cs:code
data segment
db "welcome to masm!",0
data ends
code segment
start:mov dh,10
mov dl,10
mov cl,2
...
参数:(dh)=行号, (dl)=列号, (cl)=颜色, ds:si指向字符串首地址
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int、iret指令执行前后CS、IP和栈中的状态。
assume cs:code
data segment
db "welcome to masm!",0
data ends
code segment
start:mov dh,10
mov dl,10
mov cl,2
...
阅读全文 |
评论次数(0) |
浏览次数(498) |
所属类型(课程实验)
[2008-08-15 23:26] 第12章实验12 编写0号中断的处理程序
;编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!",然后返回到DOS。
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset do0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset do0end-offset do0
cld
rep movsb ...
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset do0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset do0end-offset do0
cld
rep movsb ...
阅读全文 |
评论次数(2) |
浏览次数(289) |
所属类型(课程实验)
[2008-08-14 00:20] 第11章实验11 编写子程序
;编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母变成大写字母。
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin:mov ax,datasg
mov ds,ax
mov si,0
call letterc
mov ax,4c00h
int 21h
...
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin:mov ax,datasg
mov ds,ax
mov si,0
call letterc
mov ax,4c00h
int 21h
...
阅读全文 |
评论次数(1) |
浏览次数(271) |
所属类型(课程实验)
[2008-08-12 03:30] 第10章 课程设计1
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,...
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,...
阅读全文 |
评论次数(2) |
浏览次数(248) |
所属类型(课程实验)
[2008-07-23 03:15] 第10章 实验10~3数值显示
应用举例:编程,将数据12666以十进制的形式在屏幕第8行第3列,用绿色显示出来,在显示时我们调用本次实验中的第一个子程序show_str
assume cs:code
data segment
db 10 dup (0)
data ends
stack segment
dw 16 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,32
mov ax,12666
mov bx,data
...
assume cs:code
data segment
db 10 dup (0)
data ends
stack segment
dw 16 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,32
mov ax,12666
mov bx,data
...
阅读全文 |
评论次数(1) |
浏览次数(279) |
所属类型(课程实验)
[2008-07-22 18:02] 第10章 实验10~2解决除法溢出的问题
子程序描述
名称:divdw
功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
参数:(ax)=dword型数据的低16位
(dx)=dword型数据的高16位
(cx)=除数
返回: (dx)=结果的高16位,(ax)=结果的低16位
(cx)=余数
应用举例:计算 1000000/10(F4240H/0AH)
assume cs:code
code segment
start:mov ax,4240h ;被除数低16位
mov dx,...
名称:divdw
功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
参数:(ax)=dword型数据的低16位
(dx)=dword型数据的高16位
(cx)=除数
返回: (dx)=结果的高16位,(ax)=结果的低16位
(cx)=余数
应用举例:计算 1000000/10(F4240H/0AH)
assume cs:code
code segment
start:mov ax,4240h ;被除数低16位
mov dx,...
阅读全文 |
评论次数(1) |
浏览次数(293) |
所属类型(课程实验)