“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?
我觉得这种说法不正确。
应用程序在调用int 16h中断例程的时候,在进入中断例程后,IF和TF都已经置0了,从其0号功能子程序的作用来看,它是循环检测键盘缓冲区中是否有数据,如果有,则将其送入ah和al中,并删除缓冲区中已读取的数据。
而,我们按下了一个键后,为什么int 16h能读取呢?这是因为int 9在起作用!int 9和int 16h是相互配合使用的,所以,先由int 9中断例程将数据写入了键盘缓冲区,int 16h才能发挥作用。
所以,int 16h中不一定设置有IF=1的指令...


- [wdh464037] 说的真好 05/18 09:43
- [a809308091] 6666666666 12/15 15:50
- [chengshan] 来晚了 有组织了 04/12 00:50
- [游客] 终于找到组织了! 02/06 22:00
- [suilukai] 真牛! 02/02 18:14
- [gotonewpoint] 还得有,台电脑 !! 一台电脑写成台电脑,犹如jump之jmp,move之mov!典型汇编语言风格 07/15 07:37
- [447861996] 是不是唱出来就更喜感了?哈哈,不错的文章。 08/17 11:25
- [ilovepdg] 有才,正能量。 06/19 21:02
- [wuerlang] 真的是好久没来了!我年轻时候写的,不怎么样!竟然还让大家给顶起来了,谢谢了!祝大家学习进步! 06/07 10:47
- [jinshuwen] 呵呵,快板很上口啊 05/23 09:26
- [495523242] wo刚加入还没找到教材,不知怎么开始了? 07/25 11:43
- [jinge] 嗨!哥们,做个朋友吧 04/28 21:09
- [游客] wuerlang老兄,,现在学什么呢? 03/04 11:20
[2008-01-06 22:03] 检测点 17.1
阅读全文 |
评论次数(4) |
浏览次数(1491) |
所属类型(汇编作业)
[2008-01-04 11:22] 实验 16
;编写包含多个功能子程序的中断例程
;安装新的int7ch,其功能子程序如下:
;(1)清屏 (2)设置前景色 (3)设置背景色 (4)向上滚动一行
;ah是传递功能号 al是传递颜色值
;安装程序
assume cs:code
code segment
setscreen: jmp short set
table dw sub1,sub2,sub3,sub4
set:push bx
cmp ah,3 ;判断功能号是否过大
ja sret
mov bl,ah
mov bh,0
add bx,bx
call word ptr tab...
;安装新的int7ch,其功能子程序如下:
;(1)清屏 (2)设置前景色 (3)设置背景色 (4)向上滚动一行
;ah是传递功能号 al是传递颜色值
;安装程序
assume cs:code
code segment
setscreen: jmp short set
table dw sub1,sub2,sub3,sub4
set:push bx
cmp ah,3 ;判断功能号是否过大
ja sret
mov bl,ah
mov bh,0
add bx,bx
call word ptr tab...
阅读全文 |
评论次数(4) |
浏览次数(1371) |
所属类型(汇编作业)
[2008-01-02 17:12] 检测点 16.2
;补全程序,将a处的8个数据累加,结果存储到b处的字中.
assume cs:code,es:data
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start:mov ax,data ;设置es指向data段
mov es,ax
mov si,0
mov cx,8
s:mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
c...
assume cs:code,es:data
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start:mov ax,data ;设置es指向data段
mov es,ax
mov si,0
mov cx,8
s:mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
c...
阅读全文 |
评论次数(2) |
浏览次数(1284) |
所属类型(汇编作业)
[2008-01-02 17:09] 检测点 16.1
;补全程序,将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 a[10h],ax ;本来用add b,ax,但编译时老通不过
adc a[12h],0 ;因为单元长度不一样!所以只好改成
add si,2 ;这样子了:add a[10h],ax
loop s ;不知道还有没有其它办法?
mov ax...
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 a[10h],ax ;本来用add b,ax,但编译时老通不过
adc a[12h],0 ;因为单元长度不一样!所以只好改成
add si,2 ;这样子了:add a[10h],ax
loop s ;不知道还有没有其它办法?
mov ax...
阅读全文 |
评论次数(2) |
浏览次数(1326) |
所属类型(汇编作业)
[2008-01-01 18:08] 实验 15
;实验15 安装新的int9中断例程
;安装一个新的int9中断例程,功能:在DOS下,按下"A"键后,除非不再松
;开,如果松开,就显示满屏的"A";其他的键照常处理.
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 ax,0
mov es,ax
mov si,offset int9 ;ds...
;安装一个新的int9中断例程,功能:在DOS下,按下"A"键后,除非不再松
;开,如果松开,就显示满屏的"A";其他的键照常处理.
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 ax,0
mov es,ax
mov si,offset int9 ;ds...
阅读全文 |
评论次数(2) |
浏览次数(606) |
所属类型(汇编作业)
[2008-01-01 10:48] 检测点 15.1
(1)
可以精简为:
pushf
call dword ptr ds:[0]
两条指令.
原因:既然在进入中断例程后,IF和TF都已经置0,没有必要再进行设置了,那么
pushf
pop ax
and ah,11111100b
push ax
popf
这段代码就变成多余的了,将其删掉即可.
(2)
可能出现问题的程序段是:
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
为了保证在执行设置int9中断例程的段地址和偏移地址的指令的时...
可以精简为:
pushf
call dword ptr ds:[0]
两条指令.
原因:既然在进入中断例程后,IF和TF都已经置0,没有必要再进行设置了,那么
pushf
pop ax
and ah,11111100b
push ax
popf
这段代码就变成多余的了,将其删掉即可.
(2)
可能出现问题的程序段是:
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
为了保证在执行设置int9中断例程的段地址和偏移地址的指令的时...
阅读全文 |
评论次数(2) |
浏览次数(598) |
所属类型(汇编作业)
[2007-12-27 07:55] 实验 14
;实验14 访问CMOS RAM
;编程:以"年/月/日 时:分:秒"的格式,显示当前的日期,时间
assume cs:code
code segment
addr:db 9,8,7,4,2,0 ;将要写入70H端口的地址信息
s1:db 'yy/mm/dd hh:mm:ss';用于读取转换后的存放并显示
start:mov ax,cs ;这是从实验13(3)得到启发的
mov ds,ax
mov si,offset addr
mov di,offset s1
mov cx,6
s:call ...
;编程:以"年/月/日 时:分:秒"的格式,显示当前的日期,时间
assume cs:code
code segment
addr:db 9,8,7,4,2,0 ;将要写入70H端口的地址信息
s1:db 'yy/mm/dd hh:mm:ss';用于读取转换后的存放并显示
start:mov ax,cs ;这是从实验13(3)得到启发的
mov ds,ax
mov si,offset addr
mov di,offset s1
mov cx,6
s:call ...
阅读全文 |
评论次数(2) |
浏览次数(734) |
所属类型(汇编作业)
[2007-12-27 07:53] 检测点 14.2
;编程:用加法和移位指令计算(ax)=(ax)*10
assume cs:code
code segment
start:mov dx,0
mov cx,5
s:mov ax,1000 ;要计算的数
shl ax,1 ;左移一位
add dx,ax ;累加到dx中
loop s
mov ax,dx
mov ax,4c00h
int 21h
code ends
end start
;ax=1000
;(ax)=(ax)*10
;结果是AX=2710H (10000)....
assume cs:code
code segment
start:mov dx,0
mov cx,5
s:mov ax,1000 ;要计算的数
shl ax,1 ;左移一位
add dx,ax ;累加到dx中
loop s
mov ax,dx
mov ax,4c00h
int 21h
code ends
end start
;ax=1000
;(ax)=(ax)*10
;结果是AX=2710H (10000)....
阅读全文 |
评论次数(2) |
浏览次数(463) |
所属类型(汇编作业)
[2007-12-26 15:59] 检测点 14.1
;(1)编程:读取CMOS RAM的2号单元的内容.
mov al,2
out 70h,al ;把2写入70H地址端口
in al,71h ;从71H数据端口读取2号单元的内容
;得到当前时间的"分"
;(2)编程:向CMOS RAM的2号单元写入0.
mov al,2
out 70h,al ;先确定接收数据的地址单元
mov al,0
out 71h,al ;从71H数据端口写入0...
mov al,2
out 70h,al ;把2写入70H地址端口
in al,71h ;从71H数据端口读取2号单元的内容
;得到当前时间的"分"
;(2)编程:向CMOS RAM的2号单元写入0.
mov al,2
out 70h,al ;先确定接收数据的地址单元
mov al,0
out 71h,al ;从71H数据端口写入0...
阅读全文 |
评论次数(1) |
浏览次数(555) |
所属类型(汇编作业)
[2007-12-26 07:32] 实验 13(3)
;下面的程序,分别在屏幕的第2,4,6,8行显示四句英文诗,补全程序.
assume cs:code
code segment
s1:db 'Good,better,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
mov ds,...
assume cs:code
code segment
s1:db 'Good,better,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
mov ds,...
阅读全文 |
评论次数(3) |
浏览次数(588) |
所属类型(汇编作业)