- [mywiil] 我没用书上的入栈出栈写,就是先看看不用书上的方法能做出来否? ============== 不错 09/19 09:24
- [njutyangxiao] 谢谢你的指导 09/18 17:00
- [younggay] 嗯,应该说理解的没问题。 09/18 15:41
- [njutyangxiao] 检测点16.1的题目是中是这样定义的: a dw 1,2,3,4,5,6,7,8 b dd 09/16 11:23
- [njutyangxiao] 嗯,谢谢指导 09/16 11:22
- [wsrf] assume伪指令指定了段中标号与相应段寄存器的联系。 09/16 09:46
- [wsrf] 没有问题,不过源代码中 a db 1,2,3,4,5,6,7,8 b dw 0 怎么 09/16 09:43
- [njutyangxiao] 谢谢,keep moving! 09/16 09:06
- [njutyangxiao] 谢谢你的指导 09/16 09:05
- [njutyangxiao] 谢谢你的指导 09/16 09:05
[2009-09-20 08:53] 在虚拟机vmware下安装好dos后,在里面写好程序后,如何进行编译?
急急急!在虚拟机vmware下安装好dos后,在里面写好程序后,如何进行编译?或者如何把编译好的文件拷贝进dos里面去。请各位帮忙解答,在这里先谢过了!!...
阅读全文 |
评论次数(0) |
浏览次数(779) |
所属类型(汇编作业)
[2009-09-19 21:11] 17.3字符串的接收、显示以及删除(2)
题目:编程,编写一个接受字符串输入的程序,应该有如下功能:
(1)在输入的同时需要显示这个字符串
(2)一般在输入回车符后,字符串输入结束
(3)能够删除已经输入的字符
解答:只是写个测试程序而已
assume cs:codesg,ds:datasg
datasg segment
db 4000 dup(0)
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov si,0
mo...
(1)在输入的同时需要显示这个字符串
(2)一般在输入回车符后,字符串输入结束
(3)能够删除已经输入的字符
解答:只是写个测试程序而已
assume cs:codesg,ds:datasg
datasg segment
db 4000 dup(0)
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov si,0
mo...
阅读全文 |
评论次数(1) |
浏览次数(724) |
所属类型(汇编作业)
[2009-09-17 19:40] 检测点17.1
题目:在int 16h中断例程中,一定要设置IF=1的指令。这种说法是对的吗?
解答:开始的时候,感觉这句话应该是错的,当时是想int 16h只是从键盘缓冲区中读取数据,应该是可以不用设置IF的。但是这种说法只有在键盘数据缓冲区中有数据时正确。然而我们不能确保键盘缓冲区中会一直有数据,如果没有键盘缓冲区中没有数据,那马将会造成死锁。所以我们还是要设置IF=1使得能够响应int 9的中断。便于int 9向键盘缓冲区中写入数据,以便int 16h能个取得键盘缓冲区中的数据。
综上所述,此句话的说法是正确的。...
解答:开始的时候,感觉这句话应该是错的,当时是想int 16h只是从键盘缓冲区中读取数据,应该是可以不用设置IF的。但是这种说法只有在键盘数据缓冲区中有数据时正确。然而我们不能确保键盘缓冲区中会一直有数据,如果没有键盘缓冲区中没有数据,那马将会造成死锁。所以我们还是要设置IF=1使得能够响应int 9的中断。便于int 9向键盘缓冲区中写入数据,以便int 16h能个取得键盘缓冲区中的数据。
综上所述,此句话的说法是正确的。...
阅读全文 |
评论次数(2) |
浏览次数(982) |
所属类型(汇编作业)
[2009-09-17 14:07] 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]
分析:对于本实验,第一点是:各个子程序的编写,这并不难,参考书上很轻松就能搞定。第二点是:设置int 7ch的中断向量表项是关键,刚开始我也发现是调用时子程序的地...
安装一个新的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]
分析:对于本实验,第一点是:各个子程序的编写,这并不难,参考书上很轻松就能搞定。第二点是:设置int 7ch的中断向量表项是关键,刚开始我也发现是调用时子程序的地...
阅读全文 |
评论次数(0) |
浏览次数(737) |
所属类型(汇编作业)
[2009-09-15 14:55] 检测点16.2
题目:下面的程序将datasg段的中a处的8个数据累加,结果保存到b处的字中,补全程序
assume cs:codesg,es:datasg
datasg segment
a db 1,2,3,4,5,6,7,8
b dw 0
datasg ends
codesg segment
start:
____(1)____
____(2)____
mov si,0
mov cx,8
s:
mov al,a[si]
mov ah,0
add b,ax
...
assume cs:codesg,es:datasg
datasg segment
a db 1,2,3,4,5,6,7,8
b dw 0
datasg ends
codesg segment
start:
____(1)____
____(2)____
mov si,0
mov cx,8
s:
mov al,a[si]
mov ah,0
add b,ax
...
阅读全文 |
评论次数(2) |
浏览次数(589) |
所属类型(汇编作业)
[2009-09-15 13:50] 检测点16.1
下面的程序中将codesg段的8个数据累加,结果存储到b处的双字节中,补全程序。
assume cs:codesg
codesg segment
a dw 1,2,3,4,5,6,7,8
b dd 0
start:
mov si,0
mov cx,8
s:
mov ax,__(1)___
add ___(2)___,ax
adc ___(3)___,0
add si,___(4)___
loop s
mov ax,4c00h
int 21h
cod...
assume cs:codesg
codesg segment
a dw 1,2,3,4,5,6,7,8
b dd 0
start:
mov si,0
mov cx,8
s:
mov ax,__(1)___
add ___(2)___,ax
adc ___(3)___,0
add si,___(4)___
loop s
mov ax,4c00h
int 21h
cod...
阅读全文 |
评论次数(2) |
浏览次数(603) |
所属类型(汇编作业)
[2009-09-14 21:58] 实验15
题目:安装一个新的int9中断例程,功能:在dos下,按下‘A'键后,除非不再松开,如果松开,就显示满屏的'A';其他键照常处理。
源代码:
assume cs:codesg
stacksg segment
db 128 dup(0)
stacksg ends
codesg segment
start:
mov ax,stacksg
mov ss,ax
mov sp,128
;;;;;;;复制int9的中段程序到0000:0204h处
mov ax,0
mov es,ax
mov di,204h;设...
源代码:
assume cs:codesg
stacksg segment
db 128 dup(0)
stacksg ends
codesg segment
start:
mov ax,stacksg
mov ss,ax
mov sp,128
;;;;;;;复制int9的中段程序到0000:0204h处
mov ax,0
mov es,ax
mov di,204h;设...
阅读全文 |
评论次数(2) |
浏览次数(624) |
所属类型(汇编作业)
[2009-09-14 14:12] 检测点15.1
题目(一):仔细分析一下上面的int9中断例程,看看是否可以精简?
对于程序段:
pushf
pushf
pop ax
and ah,11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:
___(1)_____
___(2)_____
解答:因为是在int9中调用原来的int 9中断例程,而在我们进入int9这个中断程序时要做以下步骤:
(1_1)取得中断类型码N;
(1_2)标志寄存器入栈,TF=0、IF=0;
(1_3)CS、IP入栈;
(1_4)(IP...
对于程序段:
pushf
pushf
pop ax
and ah,11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:
___(1)_____
___(2)_____
解答:因为是在int9中调用原来的int 9中断例程,而在我们进入int9这个中断程序时要做以下步骤:
(1_1)取得中断类型码N;
(1_2)标志寄存器入栈,TF=0、IF=0;
(1_3)CS、IP入栈;
(1_4)(IP...
阅读全文 |
评论次数(2) |
浏览次数(613) |
所属类型(汇编作业)
[2009-09-12 08:47] 第十四章实验14
题目:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
分析:因为CMOS RAM中存储的时间信息的存储单元是:
秒:0 分:2 时:4 日:7 月:8 年:9
并且这些数据事宜BCD码的形式存储的。其次是要读取n好单元的BCD码的方法:首先是要把单元号n送给70h端口,再从71h端口中读取数据。再次是要把BCD码表示的月份以十进制的形式显示到屏幕上,这一步首先要把从CMOS RAM的n号单元读出一个字节,分为两个表示BCD码值的数据。再把分开的数据加上30h即可得到相应的ASCII码字符。第三:肯定要用循环读出各个年月日时分秒的端口的值。第四:把...
分析:因为CMOS RAM中存储的时间信息的存储单元是:
秒:0 分:2 时:4 日:7 月:8 年:9
并且这些数据事宜BCD码的形式存储的。其次是要读取n好单元的BCD码的方法:首先是要把单元号n送给70h端口,再从71h端口中读取数据。再次是要把BCD码表示的月份以十进制的形式显示到屏幕上,这一步首先要把从CMOS RAM的n号单元读出一个字节,分为两个表示BCD码值的数据。再把分开的数据加上30h即可得到相应的ASCII码字符。第三:肯定要用循环读出各个年月日时分秒的端口的值。第四:把...
阅读全文 |
评论次数(2) |
浏览次数(283) |
所属类型(汇编作业)
[2009-09-11 15:48] 检测点14.2
题目:编程,用加法和移位指令计算(ax)=(ax)*10。提示,(ax)*10=(ax)*2+(ax)*8
分析:这里要用到shl(shift logic left)逻辑左移,由于左移一位相当于原来的数乘以2,右移一位相当于原来的数除以2。所以(ax)*2 相当于ax左移一位,而(ax)*8相当于ax左移3位。
源代码如下
assume cs:codesg
codesg segment
start:
mov ax,4
mov dx,ax
shl dx,1;把dx中的内容(也就是ax中的内容)给左移一位
mov cl,3;由于...
分析:这里要用到shl(shift logic left)逻辑左移,由于左移一位相当于原来的数乘以2,右移一位相当于原来的数除以2。所以(ax)*2 相当于ax左移一位,而(ax)*8相当于ax左移3位。
源代码如下
assume cs:codesg
codesg segment
start:
mov ax,4
mov dx,ax
shl dx,1;把dx中的内容(也就是ax中的内容)给左移一位
mov cl,3;由于...
阅读全文 |
评论次数(2) |
浏览次数(638) |
所属类型(汇编作业)