第八章 数据处理的两个基本问题
计算机是进行数据处理、运算的机器。
描述性符号:reg(寄存器)和sreg(段寄存器)
reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di
sreg的集合包括:ds、ss、cs、es
在8086cpu中,只有这四个寄存器(bx、bp、si、di)可以用在“[…]”中来进行内存单元的寻址。
在“[…]”中,这四个寄存器可以单个出现,或只能以四种组合出现:bx和si、bx和di、bp和si、bp和di。
只要在“[…]”使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中。
处理大致可分为3类:读取、写入、运算。
指令执行前一刻,它将要处理的数据所在的位置可以在三个地方:cpu内部、内存、端口。
汇编语言中用3个概念来表达数据的位置。
① 立即数(idata)
对于直接包含在机器指令中的数据(执行前在cpu的指令缓冲器中),在汇编语言中称为:立即数(idata),在汇编指令中直接给出。
② 寄存器
指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。
③ 段地址(SA)和偏移地址(EA)
指令要处理的数据在内存中,在汇编指令中可用[X]的格式给出EA,SA在某个段寄存器中。存放段地址的寄存器可以是默认的,也可以是显性给出的。
定位内存单元的方法一般被称为寻址方式。
包括:直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址。
指令进行的是字操作还是字节操作,汇编语言中用以下方法处理:
① 通过寄存器名指明要处理数据的尺寸。
② 在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。
在没有寄存器参与的内存单元访问指令中,用word ptr或byte ptr显性地指明所要访问的内存单元的长度是很必要的。
③ 其他方法
有些指令默认了访问的是字单元还是字节单元。譬如栈指令。
div指令是除法指令。格式有:div reg和div 内存单元。
使用div除法应注意的问题:
① 除数:有8位和16位两种,在一个reg或内存单元中。
② 被除数:默认放在ax或ax和dx中,如果除数为8位,被除数则为16位,默认在ax中存放;如果除数为16位,被除数则为32位,在dx和ax中存放,dx存放高16位,ax存放低16位。
③ 结果:如果除数为8位,则al存储除法操作的商,ah存储除法操作的余数;如果除数为16位,则ax存储除法操作的商,dx存储除法操作的余数。
伪指令dd。
dd是用来定义dword(double word,双字)型数据的。(联想db定义字节型数据,dw定义字型数据)
dup是一个操作符,它是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复。
dup使用格式如下:
db 重复的次数 dup (重复的字节型数据)
dw 重复的次数 dup (重复的字型数据)
dd 重复的次数 dup (重复的双字型数据)
学过的mov指令集合:
mov指令非法情况:
1.两个操作数类型不一样
2.两个操作数不能都是存储器
3.段寄存器操作的一些限制
(1)段寄存器间不能传送
(2)立即数不能直接窜送给段寄存器
(3)修改CS的指令是jmp等转移指令
mov具体用法:
mov 寄存器,立即数
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
mov 寄存器,段寄存器
mov 段寄存器,内存
mov 内存,段寄存器
mov word(byte) ptr 内存单元,立即数
注:以上寄存器都是指通用寄存器:ax,bx,cx,dx,sp,bp,si,di
立即数是存储在CPU的指令缓冲器中的。
add指令用法:
add 寄存器,立即数
add 寄存器,寄存器
add 寄存器,内存单元
add 内存单元,寄存器
add word(byte) ptr 内存单元,立即数
注:add不支持任何段寄存器的操作。以上总结都是基于8086CPU。
sub指令同add一样
- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56