汇编总结3
Posted yxy98
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编总结3相关的知识,希望对你有一定的参考价值。
一、寄存器
字数据在内存中的存储
内存以字节为单位,划分为若干个单元
字节(8bit)
字(16bit)
双字(32bit)
四字(64bit)
字数据的存取原则:
字数据的低字节存放在低地址内存单位
高字节存放在高地址内存单位
取低地址内存单元地址作为字数据地址
数据在内存和cpu之间的传送
物理地址 123C8H
段地址:偏移地址 1230:C8
ds用来存放访问数据的段地址
mov ax,1000H
mov ds,ax ds 1000H
mov al,[0] al ds:0
mov bl,[1] bl ds:1
mov cx,[1] cx ds:1
[.....]表示一个内存单元 [......]中的0表示内存单元的偏移地址
8086cpu不支持将数据直接送入段寄存器的操作,ds是一个段寄存器,所以mov ds,1000H是非法的,所以只能讲这个数据先存入一个一般寄存器内
mov bx,1000H
mov ds,bx
mov,add,sub指令
mov:
1.两个操作数长度要一致
2.常数不能做第一个操作数,做第二个操作数的时候如果做高位是十六进制的字母,前面要加0
3.两个内存单元之间不能直接传数据
4.不能用mov指令修改cs和ip的值
5.两个寄存器之间不能直接传送,不能把常数送到段寄存器
add:
1.操作时不能同时是两个内存单元
2.add指令操作数不能是段寄存器
sub:
1.两个内存单元不能直接使用sub指令相减
2.sub指令的操作数不能是段寄存器
小结:字在内存中存储时,要用两个地址连续的内存单元来存放
用mov指令访问内存单元时,可以再mov指令中只给出单元的偏移地址,此时段地址默认存放在ds寄存器中
[address]表示一个偏移地址为address的内存单元
mov,add,sub是具有两个操作对象的指令,jmp是具有一个操作对象的指令
栈
栈是一个具有特殊访问方式的存储空间,他的特殊性在于最后进入这个空间的数据最先出去。
后进先出
栈底:固定的一端,栈区最高的地址单元的前一个单元
栈顶:最后入栈的字数据对应的地址单元
入栈,出栈
栈为空时,栈顶指向栈底+2
ss:栈段段寄存器,用于存放栈段的[段地址]
sp:栈指针寄存器,用于存放栈顶的偏移地址
ss:sp对应的物理地址是栈顶的物理地址
ss*16+sp就是栈顶的物理地址
push ax 表示将寄存器ax中的数据送入栈中
pop ax 表示从栈顶取出数据送入ax
在push内存单元和pop内存单元中,指令中只需给出[偏移地址],段地址在DS中
ss:sp指向栈顶元素
push ax的执行是有两步完成
1.sp=sp-2,以栈顶前面的单元为新的栈顶
2.将ax中的内容送入ss:sp指向的内存单元处,ss:sp此时指向新栈顶
对8086cpu而言,push和pop的操作
入栈和出栈都以字为单元
操作对象不能是常数
pop段寄存器中,段寄存器不能是cs和ss
当栈满的时候,再使用push指令入栈,当栈空的时候,再使用pop指令出栈,时会发生栈顶超界
用作数据段的时候,要把段地址-->ds
用作栈段时,要把段地址->ss,栈顶偏移地址->sp
用作代码段,段地址->cs,要取的指令偏移地址->ip.但是cs和ip的值不能用mov改变
在8086cpu中每个段的最大长度不能超过64kb
以上是关于汇编总结3的主要内容,如果未能解决你的问题,请参考以下文章