检测点17.1
“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?
对,因为在16h号中断中还要响应9号中断.
如:书中的例子就可以说明问题,运行下面程序,在没有任何键盘输入的情况下程序在执行完int 16h指令后就会处于等待键盘操作的状态,直到有键盘输入,程序才运行退出。
;17.asm
assume cs:code
code segment
start: mov ah,0
int 16h
mov bx,0b800h
mov es,bx
mov es:[0],al
mov es:[8],al
mov ah,1...


- [游客] 我就不打气了,面对下面几条指令。还有很多疑问吧、 出栈后明显是47H。经过AND C5后。AX变为4 04/13 22:50
- [silentpassing] 思路不错 应该可行 11/20 12:37
- [tomato] 对! 07/16 21:17
- [cx_jin] 首先,谢谢网友的建议。 “...类似于jmp..."在第9章中描述jmp short 标号的功能为 07/15 09:19
- [younggay] 挺佩服老兄的。呵呵 07/14 21:23
- [younggay] 博主好像发现了点东西哟,如此确实能保证编译过程的偏移地址能够和中断程序实际的偏移地址一致,博主够能钻 07/14 21:21
- [younggay] 程序运行倒是挺不错。但是,deckgaga的建议确实比较中肯啊。 07/14 21:15
- [duckgaga] 对于博主的" 中断中的第一条指令起点 和 安装程序的起点不要一致,;所以类似于jmp的处理,地址表中 07/14 17:01
- [tomato] 对! 07/11 10:17
- [游客] 恩,不错 07/10 18:50
[2008-07-16 14:51] 检测点17.1
阅读全文 |
评论次数(1) |
浏览次数(1043) |
所属类型(汇编作业)
[2008-07-14 13:11] 实验16(2)(;中断中的第一条指令起点 和 安装程序的起点一致,所以可以直接使用直接定址表)
assume cs:code
code segment
int7c:jmp short int7c_set ;中断中的第一条指令起点 和 安装程序的起点一致,所以可以直接使用直接定址表
table dw sub1,sub2,sub3,sub4
int7c_set:push bx
cmp ah,3
ja int7c_exit
mov bh,0
mov bl,ah
add bx,bx
call word ptr table[bx]
int7c_exit:pop b...
code segment
int7c:jmp short int7c_set ;中断中的第一条指令起点 和 安装程序的起点一致,所以可以直接使用直接定址表
table dw sub1,sub2,sub3,sub4
int7c_set:push bx
cmp ah,3
ja int7c_exit
mov bh,0
mov bl,ah
add bx,bx
call word ptr table[bx]
int7c_exit:pop b...
阅读全文 |
评论次数(3) |
浏览次数(1083) |
所属类型(汇编作业)
[2008-07-14 13:07] 实验16(1)(;中断中的第一条指令起点 和 安装程序的起点不要一致,)
;实验16,安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序:
(1)清屏(2)设置前景色(3)设置背景色(4)向上滚动一行
入口参数说明:
(1)用ah寄存器传递功能号:0表示清屏1表示设置前景色2表示设置背景色3表示向上滚动一行
(2)对于2、1号功能,用al传送颜色值,(al)属于{0,1,2,3,4,5,6,7}
;s16.asm
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset int7c
mov ax,0
mo...
(1)清屏(2)设置前景色(3)设置背景色(4)向上滚动一行
入口参数说明:
(1)用ah寄存器传递功能号:0表示清屏1表示设置前景色2表示设置背景色3表示向上滚动一行
(2)对于2、1号功能,用al传送颜色值,(al)属于{0,1,2,3,4,5,6,7}
;s16.asm
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset int7c
mov ax,0
mo...
阅读全文 |
评论次数(3) |
浏览次数(1299) |
所属类型(汇编作业)
[2008-07-10 12:57] 检测点16.1
检测点16.1
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 b,ax ;warning A4057: Illegal size for operand
;adc b[2],0 ;warning A4057:Illegal size for operand
add word ptr b,ax
adc word ptr b...
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 b,ax ;warning A4057: Illegal size for operand
;adc b[2],0 ;warning A4057:Illegal size for operand
add word ptr b,ax
adc word ptr b...
阅读全文 |
评论次数(1) |
浏览次数(1031) |
所属类型(汇编作业)
[2008-07-10 11:34] 实验15
;s15.asm实验15,安装新的int 9中断例程。
;功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”;其他的键照常处理。
;提示:按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。断码=通码+80H。
;我的系统是Windows XP,安装程序在开始调试时使用cmd.exe环境此程序运行不成功。经过在论坛浏览(这已经成为我的自学的习惯了,遇问题先到论坛找寻)。http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1016&qkSg=2&qID=6078有阐述
;此...
;功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”;其他的键照常处理。
;提示:按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。断码=通码+80H。
;我的系统是Windows XP,安装程序在开始调试时使用cmd.exe环境此程序运行不成功。经过在论坛浏览(这已经成为我的自学的习惯了,遇问题先到论坛找寻)。http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1016&qkSg=2&qID=6078有阐述
;此...
阅读全文 |
评论次数(1) |
浏览次数(943) |
所属类型(汇编作业)
[2008-07-04 11:37] 检测点15.1
(1)可以精简为:
pushf
call dword ptr ds:[0]
两条指令。
(2)仔细分析上面程序中的主程序,看看有什么潜在的问题?
在主程序中,如果在执行设置int 9中断例程的段地址和偏移地址的指令之间发生了键盘中断,则CPU将转去一个错误的地址执行,将发生错误。
找出这样的程序段,改写它们,排除潜在的问题。
提示:注意sti和cli指令的用法。
改写方法:在pop ds:[2]指令后加入一条cli指令,并在mov es:[9*4+2],cs指令后加入一条sti指令即可。
完整的程序如下:
;检测点15.1
assume cs:code
stac...
pushf
call dword ptr ds:[0]
两条指令。
(2)仔细分析上面程序中的主程序,看看有什么潜在的问题?
在主程序中,如果在执行设置int 9中断例程的段地址和偏移地址的指令之间发生了键盘中断,则CPU将转去一个错误的地址执行,将发生错误。
找出这样的程序段,改写它们,排除潜在的问题。
提示:注意sti和cli指令的用法。
改写方法:在pop ds:[2]指令后加入一条cli指令,并在mov es:[9*4+2],cs指令后加入一条sti指令即可。
完整的程序如下:
;检测点15.1
assume cs:code
stac...
阅读全文 |
评论次数(1) |
浏览次数(1046) |
所属类型(汇编作业)
[2008-07-03 12:58] 实验14
;实验14
;编写以"年/月/日 时:分:秒"的格式,显示当前的日期、时间。
assume cs:code,ds:data
data segment
db '00/00/00 00:00:00','$'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
;年9/
mov al,9
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al...
;编写以"年/月/日 时:分:秒"的格式,显示当前的日期、时间。
assume cs:code,ds:data
data segment
db '00/00/00 00:00:00','$'
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
;年9/
mov al,9
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al...
阅读全文 |
评论次数(3) |
浏览次数(859) |
所属类型(汇编作业)
[2008-07-03 12:57] 检测点14.2
;检测点14.2
;编程:用加法和移位指令计算(ax)=(ax)*10
;提示:(ax)*10=(ax)*2+(ax)*8
assume cs:code
code segment
start:
mov ax,1000h
mov dx,ax
shl dx,1 ;(ax)=(ax)*2
mov cl,3
shl ax,cl ;(ax)=(ax)*8
add ax,dx ;(ax)=(ax)*10
mov a...
;编程:用加法和移位指令计算(ax)=(ax)*10
;提示:(ax)*10=(ax)*2+(ax)*8
assume cs:code
code segment
start:
mov ax,1000h
mov dx,ax
shl dx,1 ;(ax)=(ax)*2
mov cl,3
shl ax,cl ;(ax)=(ax)*8
add ax,dx ;(ax)=(ax)*10
mov a...
阅读全文 |
评论次数(1) |
浏览次数(769) |
所属类型(汇编作业)
[2008-07-03 12:56] 检测点14.1;(1);(2)
;检测点14.1
;(1)编程:读取CMOS RAM的2号单元的内容。
;(2)编程:向CMOS RAM的2号单元写入0。
;(1)
assume cs:code
code segment
start:
mov ax,0
mov al,2
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
push ax
mov ax,0b800h
mov es,ax
mov di,12*160+30*2
pop ax
add a...
;(1)编程:读取CMOS RAM的2号单元的内容。
;(2)编程:向CMOS RAM的2号单元写入0。
;(1)
assume cs:code
code segment
start:
mov ax,0
mov al,2
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
push ax
mov ax,0b800h
mov es,ax
mov di,12*160+30*2
pop ax
add a...
阅读全文 |
评论次数(1) |
浏览次数(759) |
所属类型(汇编作业)
[2008-07-02 18:18] 真想念学生时代!
真想念学生时代!
这两天工作忙,有点撑不住了。
看见“学习动态”栏目充满活力,
努力,今天总算通过了13章。
少许欣慰。(-.-)
。。。
刚刚浏览了今天提交的“汇编作业”看到网友的评价,
原本有点阴雨的心情由阴转晴!
谢谢回应网友的支持和鼓励!
.........
这两天工作忙,有点撑不住了。
看见“学习动态”栏目充满活力,
努力,今天总算通过了13章。
少许欣慰。(-.-)
。。。
刚刚浏览了今天提交的“汇编作业”看到网友的评价,
原本有点阴雨的心情由阴转晴!
谢谢回应网友的支持和鼓励!
.........
阅读全文 |
评论次数(0) |
浏览次数(774) |
所属类型(默认类型)
『 查看更多文章 』