汇编网首页登录博客注册
chaplinyip的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈

[2011-08-25 00:54] 长长地吐一口浊气,完成了,发一下课程设计二代码分享一下小经验

点击查看原图
经过连续几天的不懈奋斗,其中大错不断,小错连连,反复调试之下,终于看到效果。当中的波谲云诡、惊涛骇浪、柳暗花明非剧中人所能体会(言重了,关键是自己的粗心和懒惰,导致经常对明显的错误视若无睹)
学了将近一个月的汇编,终于明白为何那么少人写汇编。确实,写汇编不仅要考虑整个程序的框架,还要为实现一大堆细节而烦恼,痛苦啊!所以等我完成最后一章书就投回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...
阅读全文 | 评论次数(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...
阅读全文 | 评论次数(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 ;子程...
阅读全文 | 评论次数(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) | 浏览次数(860) | 所属类型(汇编作业)

[2011-08-13 15:28] 一种精确延时/定时的方法(可达毫秒级)

不太喜欢之前发的那个延时程序,于是上网找了一个方法。具体如下:

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...
阅读全文 | 评论次数(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) | 浏览次数(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...
阅读全文 | 评论次数(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 ...
阅读全文 | 评论次数(3) | 浏览次数(380) | 所属类型(汇编作业)
页码数(2):  1  2