ASM第三章内存访问

1.字在内存中存储时,要用两个地址连续的内存单元来存放。字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。

2.[address]表示一个偏移地址为address的内存单元。
用mov指令要存放内存单元时,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在ds寄存器中。
同样的,在debug中使用d命令和e命令(处理内存数据),只需给出单元的偏移地址,段地址默认在ds寄存器中;使用a命令,u命令和t命令(处理指令),只需给出单元的偏移地址,段地址默认在cs寄存器中;

3.摘抄一段:
MOV指令是采用寻址方式最多的指令,用我们约定的符号可以表达如下:    
MOV reg/mem,imm    ;立即数送寄存器或主存 
MOV reg/mem/seg,reg  ;寄存器送寄存器(包括段寄存器)或主存 
MOV reg/seg,mem    ;主存送寄存器(包括段寄存器) 
MOV reg/mem,seg    ;段寄存器送主存或寄存器
对MOV指令有以下几条具体规定,其中有些规定对其它指令也同样有效。
(1)两个操作数的数据类型要相同,要同为8位、16位或32位;如:MOV  BL, AX等是不正确的; 
(2)在内存和寄存器之间传送字类型数据时,高地址单元和高8位寄存器,低地址单元和低8位寄存器相对应;
(3)两个操作数不能同时为段寄存器,如:MOV  ES, DS等;
(4)两个操作数不能同时为存储单元,如:MOV  VARA, VARB等,其中VARA和VARB是同数据类型的内存变量;
(5)代码段寄存器CS不能为目的操作数,但可作为源操作数,如:指令MOV  CS, AX等不正确,但指令MOV  AX, CS等是正确的;
(6)指令指针IP,不能作为MOV指令的操作数;
(7)立即数不能直接传给段寄存器,如:MOV  DS, 100H等;
(8)立即数不能作为目的操作数,如:MOV  100H, AX等; 
(9)由于指定的寄存器有明确的字节或字类型,所以对应的立即数也必须分别是字节或字;但在涉及存储器单元时,指令中给出的立即数可以理解为字,也可以理解为字节,此时必须显式指明。为了区别是字节传送还是字传送,可用汇编操作符byte ptr(字节)和word ptr(字)指定;
(10)对于不能直接传送的数据,如(2)(3)(6),可以使用通用寄存器作为中转站;不能用传送指令MOV修改寄存器CS和IP,可使用转移指令JMP设置它们的值。

4.堆栈有两种基本操作,进栈指令PUSH和出栈指令POP。
任意时刻,SS:SP指向栈顶元素。PUSH指令和POP指令执行时,CPU从SS和SP中得到栈顶的地址,然后POP是sp=sp+2,push是sp=sp-2.
PUSH,POP实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与MOV指令不同的是,PUSH和POP指令访问的内存单元的地址不是在指令中给出的而是有SS:SP指出的。同时,PUSH 和POP指令还要改变SP中的内容。栈的操作都是以字为单位的。

  注: 1字(word)=2个字节(byte)=2*8位(bit)

5.栈为空的情况下,sp是指向着栈底的下一个内存地址。

 解释:因为栈是以字为单位来操作的,设栈是16个字节,从1000h-100Fh结束,则100Eh是最靠近栈底的字的内容,pop后,sp=sp+2,帮SP指向的就是1010h这个地址。

.栈顶超界的问题:
当栈满的时候再使用PUSH指令入栈,或栈空的时候再使用POP指令出栈,都会发生栈顶超界的问题。
        8086CPU不保证我们对栈的操作不会超界。所以我们在编程的时候要自己操心栈顶超界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作时也要注意,以防止栈空的时候继续出栈而导致的超界。
        PUSH,POP等栈操作指令,修改的只是SP。因为逻辑段的最大容量为64KB,所以栈顶的变化范围最大为0-FFFFH。从栈空的时候SP=0,一直入栈,直到栈满使SP=0;如果再次入栈,栈顶将环绕,覆盖了原来栈中的内容。所以一个栈段的容量最大为64KB。

段的综述:
        一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么都不是。关键在于CPU中寄存器的设置,即当CS:IP指向该处时,CPU将其视为代码;当SS;SP指向该处时,CPU将其视为栈;当DS指向该处时,CPU将其视为普通数据。
        Debug的T命令在执行修改段寄存器SS的指令时,下一条指令也紧接着被执行。

作者:xiaoxia

出处:http://cnblogs.com/xiaoxia

本文遵从GNU 的自由文档许可证(Free Document License)的条款,欢迎转载、修改、散布。 

原文地址:https://www.cnblogs.com/xiaoxia/p/1637680.html