当int 16h检测检测缓冲区为空时,处于等待状态,且每隔一定时间检测缓冲区是否为空,这是如果键盘字符输入,就切换到int 9h中断例程将和扫描码和字符的ASCII码输到键盘缓冲区中,当int 16h再次检测时,发现缓冲区不为空,于是便把字符读出。所以个人觉得是对的。
这是我的看法,大家给点意见啊。...
- [游客] 求3号,不是1号。 10/25 19:27
- [towersimper] 这就看是CS:IP指向的还是DS:偏移地址指向,若是前者是指令,若是后者是数据。即指令和数据都是二进 10/22 16:57
- [游客] 问一下,我们如何判断e写入的是数据还是指令呢? 10/03 22:43
- [chendeke060482] 告诉大家一个秘密。用我博客里介绍的win-masm v2.2软件,然后用二进制软件打开安装目录下的m 08/05 22:49
- [zkry04] 真的是好东西,及时雨,这几天就是被这些错误困扰,头都搞大了。。。感谢楼主提供这么好的东西。收藏了!! 08/04 20:04
- [masmaster] 嘿嘿~~↖(^ω^)↗ 07/27 16:16
- [towersimper] 呵呵。我当然知道此处程序只能处理65536以下的整数啊。只是姑且按照书上说的那样啊。在第十章设计点中 07/27 15:07
- [masmaster] 找个32位大数测试了吗?例如:ffffffffh 07/27 14:51
- [towersimper] 好的,我试试。谢谢啊。呵呵 07/26 22:08
- [masmaster] 装个VM,试一试呢? 07/24 23:27
[2010-09-28 21:11] 检测点17.1
阅读全文 |
评论次数(0) |
浏览次数(766) |
所属类型(汇编作业)
[2010-09-28 20:48] 实验十六(忙于考试暂时空着,留着以后再来完成)
实验十六(忙于考试,暂时空着,留着以后再来完成)...
阅读全文 |
评论次数(0) |
浏览次数(884) |
所属类型(汇编作业)
[2010-09-27 22:36] 检测点16.2
下面的程序将code段中a处的8个数据累加,结果存储到b处的字中,补全程序。
完整程序如下:
assume cs:code,ds:data
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start:
mov ax,data
mov ds,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
code ends
end s...
完整程序如下:
assume cs:code,ds:data
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start:
mov ax,data
mov ds,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
code ends
end s...
阅读全文 |
评论次数(0) |
浏览次数(761) |
所属类型(汇编作业)
[2010-09-27 21:48] 检测点16.1
补加的代码依次为:
a[si]
word ptr b
word ptr b[2]
2
完整程序如下:
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
adc word ptr b[2],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start...
a[si]
word ptr b
word ptr b[2]
2
完整程序如下:
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
adc word ptr b[2],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start...
阅读全文 |
评论次数(0) |
浏览次数(723) |
所属类型(汇编作业)
[2010-09-27 21:33] 实验15 安装新的int 9中断例程
安装一个新的int9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”;其他的键照常处理。
程序如下:
assume cs:code,ss:stack
stack segment
db 128 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,cs
mov ds,ax
mov ax,0
mov es,ax
mov si,offset int9
mov di,204h
mov cx,o...
程序如下:
assume cs:code,ss:stack
stack segment
db 128 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,cs
mov ds,ax
mov ax,0
mov es,ax
mov si,offset int9
mov di,204h
mov cx,o...
阅读全文 |
评论次数(0) |
浏览次数(706) |
所属类型(汇编作业)
[2010-09-26 22:59] 检测点15.1
(1)仔细分析一下上面的int 9中断例程(即p269-p271),看看是否可以精简一下?
pushf
pushf
pop ax
and ah,11111100B
push ax
popf
call dword ptr ds:[0]
因为进入int 9中断例程后,IF和TF都置零,所以前面的代码中的置零代码
pushf
pop ax
and ah,11111100B
push ax
popf 可以去掉
所以以上代码段可以精简为:
pushf
call dword ptr ds:[0]
(2)仔细分析上面程序中的主程序,看看有什么潜在的问题?
在主...
pushf
pushf
pop ax
and ah,11111100B
push ax
popf
call dword ptr ds:[0]
因为进入int 9中断例程后,IF和TF都置零,所以前面的代码中的置零代码
pushf
pop ax
and ah,11111100B
push ax
popf 可以去掉
所以以上代码段可以精简为:
pushf
call dword ptr ds:[0]
(2)仔细分析上面程序中的主程序,看看有什么潜在的问题?
在主...
阅读全文 |
评论次数(0) |
浏览次数(715) |
所属类型(汇编作业)
[2010-09-26 15:30] 实验14 访问CMOS RAM
编程:以“年/月/日 时:分:秒”的格式,显示当前的日期和时间。
assume cs:code
stack segment
db 16 dup(0)
stack ends ;以上三句设置一个长16byte的栈
code segment
sign: db " ","/","/"," ",":",":" ;放置需要显示的格式字符数据
time: db 9,8,7,4,2,0 ;放置需要访问的CMOS RAM的存储单元地址
start:
mov ax,0B800h
mov es,ax ;以上两句设置显示缓冲区的段地址
mov...
assume cs:code
stack segment
db 16 dup(0)
stack ends ;以上三句设置一个长16byte的栈
code segment
sign: db " ","/","/"," ",":",":" ;放置需要显示的格式字符数据
time: db 9,8,7,4,2,0 ;放置需要访问的CMOS RAM的存储单元地址
start:
mov ax,0B800h
mov es,ax ;以上两句设置显示缓冲区的段地址
mov...
阅读全文 |
评论次数(0) |
浏览次数(749) |
所属类型(汇编作业)
[2010-09-26 09:36] 检测点14.2
编程:用加法和移位指令计算(ax)=(ax)*10
提示:(ax)*10=(ax)*2+(ax)*8
assume cs:code
code segment
start:
mov ax,0A0h
mov bx,ax
shl bx,1 ;(ax)=(ax)*2
mov cl,3
shl ax,cl ;(ax)=(ax)*8
add ax,bx ;(ax)=(ax)*10
mov ax,4c00h
int 21h
code ends
end start...
提示:(ax)*10=(ax)*2+(ax)*8
assume cs:code
code segment
start:
mov ax,0A0h
mov bx,ax
shl bx,1 ;(ax)=(ax)*2
mov cl,3
shl ax,cl ;(ax)=(ax)*8
add ax,bx ;(ax)=(ax)*10
mov ax,4c00h
int 21h
code ends
end start...
阅读全文 |
评论次数(0) |
浏览次数(754) |
所属类型(汇编作业)
[2010-09-26 09:06] 检测点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
(2) 编程:向CMOS RAM的2号单元写入0。
assume cs:code
code segment
start:
mov al,2
out 70h, al
mov al,0 ...
assume cs:code
code segment
start:
mov al,2
out 70h, al
in al, 71h
mov ax,4c00h
int 21h
code ends
end start
(2) 编程:向CMOS RAM的2号单元写入0。
assume cs:code
code segment
start:
mov al,2
out 70h, al
mov al,0 ...
阅读全文 |
评论次数(0) |
浏览次数(741) |
所属类型(汇编作业)
[2010-09-26 00:01] 实验13.3
(3)下面的程序,分别在屏幕的第2、4、6、8行显示四句英文诗,补全程序。
依次填写
[si]
[bx]
inc si
add bx,2
将字符串的偏移地址,行数,与相应字符串作为数据段存储在data数据段中,当将字符串输出到显示缓冲区上,先是设置字符串在显示缓冲区上的位置,调用int 10的2号子程序实现,而要在指定位置上输出字符串,则调用int 21h的9号子程序实现。
完整程序为:
assume cs:code
code segment
s1: db 'Good,better,best,','$'
s2: db 'Never let it res...
依次填写
[si]
[bx]
inc si
add bx,2
将字符串的偏移地址,行数,与相应字符串作为数据段存储在data数据段中,当将字符串输出到显示缓冲区上,先是设置字符串在显示缓冲区上的位置,调用int 10的2号子程序实现,而要在指定位置上输出字符串,则调用int 21h的9号子程序实现。
完整程序为:
assume cs:code
code segment
s1: db 'Good,better,best,','$'
s2: db 'Never let it res...
阅读全文 |
评论次数(0) |
浏览次数(701) |
所属类型(汇编作业)
『 查看更多文章 』