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

我的博客

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

[2008-05-29 15:57] 汇编指令总结

一.数据传送指令

1.传送指令(move)
语句格式:mov opd,ops
功能:将源操作数ops,传送至目的地址opd中,即(ops)->opd
影响标志位:无

2.数据交换指令(exchange)
语句格式:xchg opd,ops
功能:将源地址与目的地址中的内容互换,(opd)->ops,(ops)->opd
影响标志位:无

3.查表转换指令(translate)
语句格式:xlat ops或xlat
功能:描述为([bx+al])->al,即将以(bx)为首址,(al)为位移量的字节存储单元中的内容传送至al中
影响标志位:无

4.传送偏移...
阅读全文 | 评论次数(4) | 浏览次数(2603) | 所属类型(学习笔记)

[2008-05-23 17:38] 实验17

编写包含多个功能子程序的中断例程。
安装一个新的int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写。

1.编程前了解以下各信息:
(1)逻辑扇区编号的取值范围:[0,2879D]
(2)逻辑扇区号与物理扇区号的对应关系:逻辑扇区号=(面号*80+磁道号)*18+扇区号-1
面号=磁头号=int(逻辑扇区号/(1440))
磁道号=int((rem(逻辑扇区号/1440))/18)
扇区号=rem((rem(逻辑扇区号/1440))/18)+1
(3)int 7ch参数说明:
ah寄存器传递功能号:0表示读,1表示写;
bx寄存器传递要读写的扇区的逻辑扇区号;
用...
阅读全文 | 评论次数(3) | 浏览次数(1263) | 所属类型(汇编作业)

[2008-05-20 15:04] 第十七章学习笔记

1.键盘输入将引发9号中断,BIOS提供了int 9中断例程。CPU在9号中断发生后,执行int 9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中。键盘缓冲区中有16个字单元,可以存储15个按键的扫描码和对应的ASCII码。缓冲区中高位字节存储扫描码,低位字节存储ASCII码。

2.BIOS提供的int 16h中断例程的0号功能进行如下的工作:
(1)检测键盘缓冲区中是否有数据;
(2)没有则继续做第1步;
(3)读取缓冲区第一个字单元中的键盘输入;
(4)将读取的扫描码送入ah,ASCII码送入al; ...
阅读全文 | 评论次数(2) | 浏览次数(1158) | 所属类型(学习笔记)

[2008-05-19 19:00] 检测点17.1

“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?

分析一个例子,int 16h中断例程中的0号功能是从键盘缓冲区中读取一个键盘输入,如果键盘缓冲区中是空的,那么会循环等待,直到缓冲区有数据为止,所以我想CPU是不会让这种死循环的情况发生的,它至少可以在int 16h中断例程中响应int 9中断,以便给键盘缓冲区填入数据。在进入int 16h中断例程前IF和TF都置0了,所以在进入int 16h中断例程后,为了能及时响应int 9中断,应该是有指令将IF设置为1来恢复响应可屏蔽中断。...
阅读全文 | 评论次数(2) | 浏览次数(1173) | 所属类型(汇编作业)

[2008-05-19 14:08] 实验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]

1.编程思考:
(1)参考教材16.4节中的相关内容,读懂四个子程序的功能,然后编写int 7ch中断例程的安装程序。int 7ch中断例程的编写中,要注意定址表table中的各...
阅读全文 | 评论次数(2) | 浏览次数(1257) | 所属类型(汇编作业)

[2008-05-13 10:34] 16.3节利用直接定址表显示sin(x)值完整程序

利用直接定址表显示sin(x)值完整程序如下:

assume        cs:code

code        segment
start:  mov ax,120;ax赋值范围为[0,30,60,90,120,150,180]
        call showsin
        mov ax,4c00h 
        int 21h 
showsin:jmp short show
ag        dw 0,30,60,90,120,150,180;角度取值范围列表
table   dw ag0,ag30,ag60,ag90,ag120,ag150,ag180
         ;字符串偏移地址表
ag0        db '0',0
a...
阅读全文 | 评论次数(1) | 浏览次数(1186) | 所属类型(汇编作业)

[2008-05-11 22:02] 检测点16.1、16.2

检测点16.1

下面和程序将code段中a处的8个数据累加,结果存储到b处的dword中,补全程序。

assume        cs:code
code        segment
a        dw 1,2,3,4,5,6,7,8
b        dd 0

start:        mov si,0
        mov cx,8
s:        mov ax,a[si]
        add word ptr b,ax;等同于add word ptr [b],ax
        adc word ptr b+2,0;等同于add word ptr [b+2],ax
        add si,2
        loop s
        mov ax,4c00h
        int 21h
co...
阅读全文 | 评论次数(7) | 浏览次数(1052) | 所属类型(汇编作业)

[2008-05-11 20:44] 第十六章学习笔记

1.数据标号:标记了存储的单元的地址和长度的标号,它不同于仅仅表示地址的地址标号。使用这种包含单元长度的标号,使我们可以以简洁的形式访问内存中的数据。

2.在后面加有冒号的地址标号只能在代码段中使用,不能在其他段中使用。如果想在代码段中直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来,这种联系是编译器的需要,以便在编译时确定标号的段地址在哪个寄存器中。

3.可以将标号当作数据来定义,此时,编译器将标号所表示的地址当作数据的值。

4.利用表,在两个数据集合之间建立一种映射关系,使我们可以用查表的方法根据给出的数据得到其在另一集合中的对应数据...
阅读全文 | 评论次数(0) | 浏览次数(1101) | 所属类型(学习笔记)

[2008-05-11 20:40] 推荐博文 对教材P273倒数第4行注释的重新理解

教材P273倒数第4行的内容为:

call dword ptr cs:[200h];此中断例程执行时,(cs)=0

当学习到此处时,虽然知道中断过程由CPU硬件自动完成,也知道做了哪几个步骤的工作(取中断类型码、Flag入栈、将IF和TF置0、CS和IP入栈、根据中断类型码查中断向量表设置CS和IP),但具体的执行过程(没有看到具体的指令)在我头脑里有些概念还是比较模糊,以至于对(cs)当时为何为0感到迷惑,通过重新复习12及15章节的内容,有了新的理解如下:

中断向量表是在内存中存放的,对于8086PC机,中断向量表指定放在内存地址0处。从内存0000:0000到0000:...
阅读全文 | 评论次数(11) | 浏览次数(1893) | 所属类型(问题求解)

[2008-05-10 12:29] 实验15

安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”;其他的键照常处理。

1.实验前的准备工作:
(1)安装vFloppy,使机器启动时能选择进入DOS实模式,因为本程序运行后在DOS保护模式下会看不到预期效果。
(2)仔细分析教材中例题,了解原int 9中断例程入口地址及新编int 9中断例程入口地址的设置及保存。在新编的中断例程中要调用原中断例程以处理其他键产生的中断过程,只是当检测到“A”的断码时才跳转运行满屏显示“A”的语句。
(3)当扫描码为“A”的断码时,显示满屏幕的“A”,“A”的通码为1eh,所以断码=1eh...
阅读全文 | 评论次数(6) | 浏览次数(1324) | 所属类型(汇编作业)
『 查看更多文章 』