码迷,mamicode.com
首页 > 其他好文 > 详细

汇编总结3

时间:2018-11-14 01:08:02      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:默认   改变   字节   段地址   物理   空间   存储空间   特殊性   res   

一、寄存器

字数据在内存中的存储

内存以字节为单位,划分为若干个单元

字节(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

标签:默认   改变   字节   段地址   物理   空间   存储空间   特殊性   res   

原文地址:https://www.cnblogs.com/yxy98/p/9949295.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!