汇编总结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的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言基础知识的总结

汇编实验第二章总结

汇编语言第一章节知识总结

Arm汇编学习总结

汇编语言课堂总结3——内存访问

汇编语言第一章总结