- [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-15 19:29] 16.3求sin值的程序
编写一个子程序,计算sin(x)。并在屏幕中间显示结果。
源代码:
assume cs:codesg
codesg segment
start:
mov al,60
call showsin
mov ax,4c00h
int 21h
showsin:
jmp short show
table dw ag0,ag30,ag60,ag90,ag120,ag150,ag180
ag0 db '0',0
ag30 db '0.5',0...
源代码:
assume cs:codesg
codesg segment
start:
mov al,60
call showsin
mov ax,4c00h
int 21h
showsin:
jmp short show
table dw ag0,ag30,ag60,ag90,ag120,ag150,ag180
ag0 db '0',0
ag30 db '0.5',0...
阅读全文 |
评论次数(3) |
浏览次数(295) |
所属类型(Assembly's Road)
[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) |
浏览次数(588) |
所属类型(汇编作业)
[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) |
浏览次数(602) |
所属类型(汇编作业)
[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) |
浏览次数(612) |
所属类型(汇编作业)
[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) |
浏览次数(637) |
所属类型(汇编作业)
[2009-09-11 14:50] 第十四章检测点14.1
题目(1):编程,读取CMOS RAM的2号单元的内容
分析:读取CMOS RAM要分两步:首先是把要读写的单元号送给70h(70h是地址端口,存放要访问的 CMOS RAM单元的地址)。其次是从端口71h(71h是数据端口,存放从选定的COMS RAM单元中读取的数据,或者要写入的数据)中读出2号单元的内容。
源代码如下:
assume cs:codesg
codesg segment
start:
mov al,2
out 70h,al;把al中的数据2写入70h端口
in al,71h;读取存放在71h中2号单元的数据给al ...
分析:读取CMOS RAM要分两步:首先是把要读写的单元号送给70h(70h是地址端口,存放要访问的 CMOS RAM单元的地址)。其次是从端口71h(71h是数据端口,存放从选定的COMS RAM单元中读取的数据,或者要写入的数据)中读出2号单元的内容。
源代码如下:
assume cs:codesg
codesg segment
start:
mov al,2
out 70h,al;把al中的数据2写入70h端口
in al,71h;读取存放在71h中2号单元的数据给al ...
阅读全文 |
评论次数(2) |
浏览次数(293) |
所属类型(汇编作业)
[2009-09-11 10:03] 第十三章实验13(3)
题目:下面的程序,分别在屏幕上的第2、4、6、8行显示4句英文诗,补全程序。
assume cs:codesg
codesg 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,offsest s4
row: db 2,4,6,8
...
assume cs:codesg
codesg 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,offsest s4
row: db 2,4,6,8
...
阅读全文 |
评论次数(0) |
浏览次数(261) |
所属类型(汇编作业)
[2009-09-10 22:33] 实验13(1)
题目:编写并安装Int 7ch中端例程,功能为显示一个用0结束的字符串,中断例程安装在0000:0200h处
参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串的首地址。
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意int、iret指令执行前后的cs、ip和栈中的状态。
assume cs:codesg
datasg segment
db "welcome to masm! ",0
datasg ends
codesg segment
start:
mov ax,cs
m...
参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串的首地址。
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意int、iret指令执行前后的cs、ip和栈中的状态。
assume cs:codesg
datasg segment
db "welcome to masm! ",0
datasg ends
codesg segment
start:
mov ax,cs
m...
阅读全文 |
评论次数(2) |
浏览次数(288) |
所属类型(汇编作业)