


- [parse] Linux实在是让人又爱又恨:爱的是任何有勇气探索者都可以鼓捣它,恨的是它的系统表现实在是让人难以恭 02/17 20:55
- [rotapple] 过中秋,加上玩了几天游戏,我的程序丢在一边很多天了。 这两天把它写完了。偏移修正也加完了。 现在 09/15 16:22
- [rotapple] 我的意思是这样: proc_a: push ax push bx s: 09/15 16:19
- [chaplinyip] 好像也过了十几天,对这代码好像有点陌生。 不过我试过从显示时间返回至主菜单来回几十次也没发生什 09/09 23:55
- [chaplinyip] 不要急,忙则乱,心平气和一定会有解决之道。一开始写没必要把所有细节都考虑好,可以先大概弄出一个较粗糙 09/09 22:59
- [rotapple] 1 lp 2 mov ax,0 3 mov bx,0 4 jmp short l 09/08 18:36
- [rotapple] 重新跳回main会不会好点?因为重设了ss 09/08 18:25
- [rotapple] 我也不知道到底是不是这么个运行过程。 是同时发生吗? 还是怎样的顺序?? 09/08 18:21
- [rotapple] 我的程序完成了70%左右。只有设置时间没写了。 我写的时候解决了一个重大问题,就是从显示时间返回至 09/08 18:15
- [rotapple] OK,明白。 09/05 10:39
[2011-08-25 00:54] 长长地吐一口浊气,完成了,发一下课程设计二代码分享一下小经验
经过连续几天的不懈奋斗,其中大错不断,小错连连,反复调试之下,终于看到效果。当中的波谲云诡、惊涛骇浪、柳暗花明非剧中人所能体会(言重了,关键是自己的粗心和懒惰,导致经常对明显的错误视若无睹)
学了将近一个月的汇编,终于明白为何那么少人写汇编。确实,写汇编不仅要考虑整个程序的框架,还要为实现一大堆细节而烦恼,痛苦啊!所以等我完成最后一章书就投回C++的怀抱。当然我还是不能离开汇编的舞台,毕竟这本教材屏蔽了太多知识,还是要继续深造。而且光学语言只能是工匠水平,所以还需花时间在离数和数据结构上。
好吧,现在说一下个人经验:
1.平台搭建
准备工具:Vmware(安装纯Dos),DiskG...
学了将近一个月的汇编,终于明白为何那么少人写汇编。确实,写汇编不仅要考虑整个程序的框架,还要为实现一大堆细节而烦恼,痛苦啊!所以等我完成最后一章书就投回C++的怀抱。当然我还是不能离开汇编的舞台,毕竟这本教材屏蔽了太多知识,还是要继续深造。而且光学语言只能是工匠水平,所以还需花时间在离数和数据结构上。
好吧,现在说一下个人经验:
1.平台搭建
准备工具:Vmware(安装纯Dos),DiskG...
阅读全文 |
评论次数(13) |
浏览次数(1407) |
所属类型(汇编作业)
[2011-08-18 18:23] 光标版字符串的输入输出
实现在DOS中输入并显示字符串的功能,退格键删除,回车键结束,带光标
修改了教材上写显存输出字串的方法,用int 10h与int 21h,其他大致相同
思路:按一次键重新输出一次字串。ds:si指向字符栈。子程序string_stack有三个功能:字符的入栈、出栈、串的显示,用ah传递功能号,用top单元记录栈顶指针
注意:按下退格键时,字符弹出栈空间,但仍残留在显存
代码如下:
assume cs:code
data segment
dd 10 dup (0) ;-----------字符栈
data ends
code segment
ma...
修改了教材上写显存输出字串的方法,用int 10h与int 21h,其他大致相同
思路:按一次键重新输出一次字串。ds:si指向字符栈。子程序string_stack有三个功能:字符的入栈、出栈、串的显示,用ah传递功能号,用top单元记录栈顶指针
注意:按下退格键时,字符弹出栈空间,但仍残留在显存
代码如下:
assume cs:code
data segment
dd 10 dup (0) ;-----------字符栈
data ends
code segment
ma...
阅读全文 |
评论次数(0) |
浏览次数(816) |
所属类型(汇编作业)
[2011-08-18 00:13] int 16h的0号功能和与int 9比较
int 16h:
1)检测键盘缓冲区是否有数据
2)没有则继续1)
3)读取缓冲区第一个字单元
4)扫描码送入ah,ASCII送入al
5)将已读取的键盘输入从缓冲区删除
与int 9h比较:
int 9在按键时向键盘缓冲区写入数据
int 16h在程序对其调用时将数据从缓冲区读出
单纯调用16h中断时,屏幕是不会显示用户刚输入的字母
个人认为,int 16h中断例程中应有设置IF=1的指令,否则无法在缓冲区为空时调用int 9...
1)检测键盘缓冲区是否有数据
2)没有则继续1)
3)读取缓冲区第一个字单元
4)扫描码送入ah,ASCII送入al
5)将已读取的键盘输入从缓冲区删除
与int 9h比较:
int 9在按键时向键盘缓冲区写入数据
int 16h在程序对其调用时将数据从缓冲区读出
单纯调用16h中断时,屏幕是不会显示用户刚输入的字母
个人认为,int 16h中断例程中应有设置IF=1的指令,否则无法在缓冲区为空时调用int 9...
阅读全文 |
评论次数(3) |
浏览次数(978) |
所属类型(汇编作业)
[2011-08-17 23:39] 直接定址表:实验十六
题目:安装int 7ch中断,实现 0)清屏 1)设置前景色 2)背景色 3)向上滚一行
入口参数:
1)ah为功能号,如前文的每个功能前的小标号
2)对于2、3功能,用al传送颜色值(0~7)
注意事项:
table段中的数据表示子程序的绝对地址,所以放在了安装程序的上方.
而且新中段偏移地址应设为0
代码如下:
assume cs:code
code segment
;#############################
show_screen:
jmp short set
table dw clear,front,back,mov_up ;子程...
入口参数:
1)ah为功能号,如前文的每个功能前的小标号
2)对于2、3功能,用al传送颜色值(0~7)
注意事项:
table段中的数据表示子程序的绝对地址,所以放在了安装程序的上方.
而且新中段偏移地址应设为0
代码如下:
assume cs:code
code segment
;#############################
show_screen:
jmp short set
table dw clear,front,back,mov_up ;子程...
阅读全文 |
评论次数(0) |
浏览次数(821) |
所属类型(汇编作业)
[2011-08-17 23:28] 外中断一章小结及实验十五
实验十五题目:安装新int9中断例程,功能:按下'a',除非不松开,如果松开,就显示满屏"A",其他键照常处理。
预备知识:
1.可屏蔽中断:cpu遇到可屏蔽中断信息时,先检测IF,若IF=1,则引发中断,IF=0则相反。不可屏蔽中断类型码固定为2.
2.键盘输入:按下键盘上的一个键,则键盘上的一块芯片产生一个扫描码(通码),扫描码被送到主板上的相关接口芯片的寄存器中,其端口地址为60h;若是松开一个键,则产生一个断码。扫描码长度为一字节,通码第7位为0,断码为1,即:断码=通码+80h
3.9号中断:扫描码到达60h端口后,芯片向cpu发出中断类型码为9的中断信息,检测I...
预备知识:
1.可屏蔽中断:cpu遇到可屏蔽中断信息时,先检测IF,若IF=1,则引发中断,IF=0则相反。不可屏蔽中断类型码固定为2.
2.键盘输入:按下键盘上的一个键,则键盘上的一块芯片产生一个扫描码(通码),扫描码被送到主板上的相关接口芯片的寄存器中,其端口地址为60h;若是松开一个键,则产生一个断码。扫描码长度为一字节,通码第7位为0,断码为1,即:断码=通码+80h
3.9号中断:扫描码到达60h端口后,芯片向cpu发出中断类型码为9的中断信息,检测I...
阅读全文 |
评论次数(1) |
浏览次数(860) |
所属类型(汇编作业)
[2011-08-13 15:28] 一种精确延时/定时的方法(可达毫秒级)
不太喜欢之前发的那个延时程序,于是上网找了一个方法。具体如下:
PC机中有一个用于定时的集成电路,这个电路有三个通道,其中通道1用于控制系统内部的时钟,当系统启动时,它会发出一个频率为18.2Hz的信号,这个信号直接送到系统的中断控制器,每一Hz产生一个硬件中断,对应中断号为08h。也就是说,自系统启动,CPU就每隔1/18.2秒(约为55ms)执行一次08中断。这个中断的作用就是计数。
在内存中有一块四字节的空间用于保存计数值。cpu每执行一次08中断,该空间的数值就会加一。由此可知,系统每过n秒,计数值就会增加18.2*n(应用时,一般取整)。因此,当我们想要精确定时/延时时,...
PC机中有一个用于定时的集成电路,这个电路有三个通道,其中通道1用于控制系统内部的时钟,当系统启动时,它会发出一个频率为18.2Hz的信号,这个信号直接送到系统的中断控制器,每一Hz产生一个硬件中断,对应中断号为08h。也就是说,自系统启动,CPU就每隔1/18.2秒(约为55ms)执行一次08中断。这个中断的作用就是计数。
在内存中有一块四字节的空间用于保存计数值。cpu每执行一次08中断,该空间的数值就会加一。由此可知,系统每过n秒,计数值就会增加18.2*n(应用时,一般取整)。因此,当我们想要精确定时/延时时,...
阅读全文 |
评论次数(2) |
浏览次数(885) |
所属类型(汇编作业)
[2011-08-11 17:24] 延时子程序
用bx与ax表示一个32位的大数,bx存放高位字节,ax存放低位字节,然后利用循环递减一,直至为0
(若32位不够用,可增设寄存器)
PS:若把bx的值设得太大(如下),cpu的使用率貌似会狂飙至50%以上
delay:
push ax
push bx
mov bx,0ffffh ;-----------------按需改变
sub ax,ax ;-----------------按需改变
del_time:
sub ax,1
sbb bx,0
cmp ax,0
jne del_time
cmp bx,0
jne del_t...
(若32位不够用,可增设寄存器)
PS:若把bx的值设得太大(如下),cpu的使用率貌似会狂飙至50%以上
delay:
push ax
push bx
mov bx,0ffffh ;-----------------按需改变
sub ax,ax ;-----------------按需改变
del_time:
sub ax,1
sbb bx,0
cmp ax,0
jne del_time
cmp bx,0
jne del_t...
阅读全文 |
评论次数(3) |
浏览次数(789) |
所属类型(汇编作业)
[2011-08-11 12:38] 访问cmos ram,动态显示当前日期时间,有世纪数
准备知识:
1、cpu通过70h和71h这两个端口来读写cmos ram。70h为地址端口,存放要访问的cmos ram单元地址;71h为数据端口,存放选定单元数据
2、cmos ram中,日期时间存放单元为:
年份世纪数:32h,年份后两位:9,月:8,日:7,时:4,分:2,秒:0
这些数据采用BCD码方式存放
3、关于移位运算,当移动位数大于一,需要将其存放于cl中
以下是代码:
assume cs:code
data segment
db 32h,9,8,7,4,2,0
db "ffff/ff/ff ff:ff:ff","$"
data ends
co...
1、cpu通过70h和71h这两个端口来读写cmos ram。70h为地址端口,存放要访问的cmos ram单元地址;71h为数据端口,存放选定单元数据
2、cmos ram中,日期时间存放单元为:
年份世纪数:32h,年份后两位:9,月:8,日:7,时:4,分:2,秒:0
这些数据采用BCD码方式存放
3、关于移位运算,当移动位数大于一,需要将其存放于cl中
以下是代码:
assume cs:code
data segment
db 32h,9,8,7,4,2,0
db "ffff/ff/ff ff:ff:ff","$"
data ends
co...
阅读全文 |
评论次数(1) |
浏览次数(425) |
所属类型(汇编作业)
[2011-08-10 15:22] 实验十三:在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
main:
mov ax,cs
mov ds,ax
mov bx,offset s
mov si,offset row
mov c...
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
main:
mov ax,cs
mov ds,ax
mov bx,offset s
mov si,offset row
mov c...
阅读全文 |
评论次数(2) |
浏览次数(323) |
所属类型(汇编作业)
[2011-08-10 14:13] DOS中断例程应用:int 21h
1.程序返回功能
mov ah,4ch ;程序返回
mov al,0 ;返回值
int 21h
(ah)=4ch表示调用第21h号中断例程的4ch号子程序
通常写为:
mov ax,4c00h
int 21h
2.在光标位置显示字符串功能
ds:dx指向字符串;要显示的字符串需用"$"作为结束
mov ah,9;功能号9,表示在光标位置显示字符串
int 21h
例子:在屏幕的5行12列显示"Welcome to masm!"
assume cs:code
data segment
db "Welcome to ...
mov ah,4ch ;程序返回
mov al,0 ;返回值
int 21h
(ah)=4ch表示调用第21h号中断例程的4ch号子程序
通常写为:
mov ax,4c00h
int 21h
2.在光标位置显示字符串功能
ds:dx指向字符串;要显示的字符串需用"$"作为结束
mov ah,9;功能号9,表示在光标位置显示字符串
int 21h
例子:在屏幕的5行12列显示"Welcome to masm!"
assume cs:code
data segment
db "Welcome to ...
阅读全文 |
评论次数(3) |
浏览次数(380) |
所属类型(汇编作业)