一.数据传送指令
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.传送偏移...
- [游客] 可以用耶! 11/23 11:31
- [harryxiyou] 好样的,我一直最喜欢汇编,应该叫 ASSEMBLY LANGUAGE,更贴切,哈哈。 08/17 16:16
- [till] 唉 哪是总结哦 就是抄一遍而已 “应的机器码:E9 disp ” 明显的错误都发现不了 07/17 15:49
- [zouhehui] 写的非常好,佩服! 11/29 11:21
- [hs1024] 支持··来向你学习 07/14 14:01
- [游客] 谢谢博主 11/28 00:48
- [mouselove] 偏移地址是16位寄存器,它的取值范围是0000H~FFFFH 11/16 15:41
- [游客] 不好意思,这个问题很愚蠢,偏移地址可以为零。 11/16 14:52
- [mwh1987] 有一个问题:偏移地址能否为零? 11/16 10:21
- [游客] 谢谢您的帮助,谢谢!! 08/24 14:43
- [游客] [url=http://www.gddzbq.com]深圳搬家公司[/url] [url=http 03/02 15:09
- [nono] 博主是高手啊 经验丰富 我目前上大学,刚刚接触汇编 以后还请博主多多指教 11/25 16:32
- [sirius] 你好啊 我也是刚看 王爽老师的 汇编语言 但是有些地方还是很模糊 你还有什么更直接的联系 06/06 19:29
- [游客] 你好啊 我也是刚看 王爽老师的 汇编语言 但是有些地方还是很模糊 你还有什么更直接的联系方式 06/06 10:28
- [color] 像你学习! 05/11 19:30
- [sirius] 你喜欢它,就会觉得好玩,如果你怕它,就会觉得枯燥,我一开始很怕它,现在不怕了,嘿嘿 04/22 22:49
- [wuerlang] 真的勇士,敢于直面枯燥的汇编 ------- 其实汇编很有趣,也好玩的。 04/22 08:33
[2008-05-29 15:57] 汇编指令总结
阅读全文 |
评论次数(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寄存器传递要读写的扇区的逻辑扇区号;
用...
安装一个新的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.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来恢复响应可屏蔽中断。...
分析一个例子,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中的各...
安装一个新的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...
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...
下面和程序将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.利用表,在两个数据集合之间建立一种映射关系,使我们可以用查表的方法根据给出的数据得到其在另一集合中的对应数据...
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:...
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...
1.实验前的准备工作:
(1)安装vFloppy,使机器启动时能选择进入DOS实模式,因为本程序运行后在DOS保护模式下会看不到预期效果。
(2)仔细分析教材中例题,了解原int 9中断例程入口地址及新编int 9中断例程入口地址的设置及保存。在新编的中断例程中要调用原中断例程以处理其他键产生的中断过程,只是当检测到“A”的断码时才跳转运行满屏显示“A”的语句。
(3)当扫描码为“A”的断码时,显示满屏幕的“A”,“A”的通码为1eh,所以断码=1eh...
阅读全文 |
评论次数(6) |
浏览次数(1324) |
所属类型(汇编作业)
『 查看更多文章 』