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

我的博客

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

[2009-02-13 18:02] 推荐博文 【实验16】编写包含多个功能子程序的中断例程

开学了,路上花了一天一夜,今天又睡了一天,真累!一觉起来,赶快继续看汇编。
   实验16中的功能子程序都已经在16.4节中实现,要做的就是把这段程序做成int 7ch中断例程。原本以为很好写的,可是写好后调试了几遍都出问题,后来锁定为数据标号table那一句出问题了。研究了好大一会儿,才找出具体的原因以及解决办法。这个问题还不小呢,我想王老师出这道题的意图可能就有对数据标号的考察,看是不是深入理解了其机制。我来讲讲我的看法:
【1】此句table  dw sub1,sub2,sub3,sub4。如果按照16.4中程序的写法,则sub1-sub4中所保存的偏移地址都是以程序开始为参照的,即...
阅读全文 | 评论次数(2) | 浏览次数(1459) | 所属类型(汇编作业)

[2009-02-10 16:01] 【实验15】安装新的int9中断例程

先来说说检测点15.1吧,程序没什么问题。第一题只保留pushf和call那一句。第二题在保存int9入口地址的前后分别加cli和sti。这两处在后面的程序中也有体现。只是当时在思考时确实想了许多,首先,int机制,在执行中断时,已经完成了以下四步:
  [1]取得中断类型码
  [2]标志寄存器入栈,TF、IF置0
  [3]cs、ip入栈
  [4]设置cs、ip为终端程序入口地址。
在模拟int指令时,第[1]步不需要执行了,因为已经确定是由键盘引发的中断。15.1的第一题说道进入中断例程以后IF和TF都已经置0,所以不需要再设置了。由此可以推知进入中断例程后步骤[1][3][...
阅读全文 | 评论次数(3) | 浏览次数(1078) | 所属类型(汇编作业)

[2009-02-09 12:17] 【实验14】访问CMOS RAM

这章的内容比较少,主要就是几个命令:in、out、shl、shr。cmos的端口号为70和71,通过这两个端口号相互配合就可以读写cmos ram中的内存单元。书中提到了存放年、月、日、时、分、秒的内存单元号为9、8、7、4、2、0,所以实验14也就比较简单了。
    定址方式就借鉴了实验13中的,这种方法确实不错。

【代码】
assume cs:code
code segment
  str: db '// :: '
  row: db 9,8,7,4,2,0
  start: mov ax,cs
         mov ds,ax
         mov ax,...
阅读全文 | 评论次数(1) | 浏览次数(1126) | 所属类型(汇编作业)

[2009-02-08 18:33] 【实验13】编写、应用中断例程

学完这一章,对于中断程序有了更进一步的了解,感觉类似于子程序,只不过这个子程序多了个事先安装的过程。可以解决上一章遗留的一个小问题了,本章开始就提到了,这与上一章的推测是一致的,只是那是原理还搞不明白,现在就好多了。
     后面几节提到了bios和dos中断例程,我想这就是一个很大的资源啊,在网上搜到了一些关于bios和dos的入口出口参数,再好好琢磨下。
     实验13提到的题目并不难,其实就是写个子程序,入口参数已经给出,第2道书中已经讲过了。第3题的编程思想值得学习,感觉真的很灵活呢,让我自己想可能都想不到这种方法。

【题目1】
assume cs:code
cod...
阅读全文 | 评论次数(2) | 浏览次数(702) | 所属类型(汇编作业)

[2009-02-07 15:50] 【实验12】编写0号中断的处理程序

看完了第12章,感觉到这个中端机制确实强大,cpu每执行完一条指令,就检测是不是有中断信息。接受到中断信息后,对于不同的信息就转到中断向量表中不同的位置,读取中断程序的入口地址,然后执行中断程序,完毕后再返回。由于中断信息有各种各样的,所以能处理的情况也就有很多。
    本章的程序没什么问题,后面的实验12也就是把书中的程序改动几处即可。但是我有两个问题还不理解:
【问题1】cpu可以根据不同的中断信息来执行不同的中断程序,但是cpu是如何得知产生了中断信息呢?对于单步执行已经明白,就是每次检测到TF位为1,就引发但不中断。但是对于除法溢出呢?每次除法溢出后会有怎样的改变使得cpu得到了...
阅读全文 | 评论次数(4) | 浏览次数(1259) | 所属类型(汇编作业)

[2009-02-06 23:18] 推荐博文 【课程设计1的拓展】打印九九乘法表

通过实验10以及课程设计一的实践,发现了不少问题,也收获了不少经验。我想学习本就是一个不断发现问题以及增长经验的过程。为了巩固一下之前的学习,加深对学过知识的理解,我想了一道题目,做为给自己的一个测试。之所以选这个九九乘法表,是因为它类似于课程设计一,之前写的几个子程序show_str、dtoc、divdw都能派上用场,且输出也有格式限制,我想用它来做一个课设一的补充题目是很合适的。
     这次写就轻松多了,我的思路是先把类似于1x1=输入到屏幕上,然后再集中解决相乘以后的十六进制数转化为字符串的问题。程序过程中我出现的几个错误及解决:
[1]写好运行第一遍时又出现了死循环,满屏幕的1...
阅读全文 | 评论次数(1) | 浏览次数(1691) | 所属类型(汇编作业)

[2009-02-06 22:55] 【实验11】编写子程序

第11章,我几乎是怀着很兴奋的心情看完的。因为这一章讲的一些命令,我感觉学到目前为止,又让我能用汇编处理的东西多了一个层次。首先是adc与sbb命令,使大数和、差不成问题,然后是cmp命令与条件转移指令(je、jne、jb、jnb、ja、jna)的结合,此就相当于高级语言中的if命令了,这可是一个重要的功能,可以执行数的大小判断、区间判断等等涉及到需要比较灵活的条件才继续执行的程序、最后又有一个df标志与movsb、movsw命令,事先设置好df的值,只需要短短的一行rep movsb(movsw)就可以实现数据的批量赋值。很强大!
     这章开始的几节是讲几个标志寄存器的情况,刚开始看...
阅读全文 | 评论次数(3) | 浏览次数(983) | 所属类型(汇编作业)

[2009-02-06 01:04] 推荐博文 【课程设计一】按格式显示数据

同学聚会,又玩了一天。晚上回来赶紧把遗留的课程设计一给做做。虽然昨天走的时候已经把大概思路理了一下,但今天还是花了两个多小时。以后真是要细心一点,一个很不起眼的笔误就会耽误大量的时间去查找。编写过程中遇到的问题以及注意:

【思路】课设一与之前的实验7思路相类似。共同之处在于都是把data段中的内容按格式写入地址。不同之处在于课设一是写入缓存,并且主要是以可以识别的Ascii字符形式写入。思考:
    <1>年份已经是字符串类型,只需要从data中读取,然后直接写入显存中。
    <2>收入,雇员和人均收入都需要进行转化。注意的是有些数据已经超出16字节,需要把之前写的子程序3稍微...
阅读全文 | 评论次数(1) | 浏览次数(1666) | 所属类型(汇编作业)

[2009-02-04 03:18] 【实验10[1-3]】编写子程序

【1】显示字符串
    这个子程序比较简单,和上一个输出显示的程序类似。需要注意的是给定已经赋值的参数后要对参数进行转换操作。转换为要求的显示位置的缓存地址。我的代码中有两处可以提高些效率:
<1>把mov ax,0b800h 和 mov es,ax写到上面,避免后面每次循环都执行此两句。
<2>本来计算列数,要先减一,再乘2。把乘2换为加法运算,这样可以避免之前保存在ax中的结果再次另存。可以省去一行保存ax的代码。

[show_str]

assume cs:code
data segment
  db 'Welcome to masm!',0
data ends ...
阅读全文 | 评论次数(1) | 浏览次数(750) | 所属类型(汇编作业)

[2009-02-04 02:34] 推荐博文 【实验6补充】问题7.9的拓展

在学到问题7.9(即实验6)时,我曾经提出过一个问题,就是能不能同时处理不同长度的字符串。学到第十章,已经可以解决这个遗留问题。可以处理两种情况:
<1>即课本上的情况,每行都为16个字节,但每行的单词字母个数不相等。
<2>单词字母个数不同,且单词为一个挨着一个,以0分隔。
现以情况<2>为例说明:
思路:共四个单词,外循环4次。每次对每个单词执行小写转大写。用jcxz结束当前单词,内存地址依次增加即可。情况<1>与此类似,不同在于内存地址第二次从第二行开始,以此类推。
【代码】
assume cs:code
data segment
   db 'display',0
 ...
阅读全文 | 评论次数(1) | 浏览次数(1216) | 所属类型(汇编作业)
『 查看更多文章 』