汇编第二日

显存中某区域改变,显示器便会在对应区域改变

 

出入栈以为单位,  push al  错误

pop ax把栈顶数据赋值给寄存器

pop [0]把栈顶数据赋值到ds:[0]

push到栈中,高位数据对应高位地址,低位数据对应低位地址

 

ss存放栈顶数据的段地址,sp存放栈顶的偏移地址,任意时刻ss:sp指向栈顶元素

 

操作分成两步完成:

push:sp = sp - 2;  mov ss:sp, xxx;

pop: mov XXX, ss:sp;sp = sp+2;

图示:

注意:

当栈为空时,SS:SP为1000F+1 = 10010,这样push时,经过SP+=2,SS:SP会跳到1000EH

 

SS像DS一样可以用寄存器赋值,但是段寄存器中CS以及IP寄存器只能通过jmp指令来改变值:

mov ax, xxx

mov ss, ax

mov sp, XXX

 

将ax清零:

1.mov ax, 0   机器指令占了三个存储单元

2.sub ax, ax  机器指令占了两个存储单元

3.xor ax, ax

 

可以用栈存储以后需要恢复的寄存器内容

i386 32位栈的使用:

 

 

CPU只认ss:sp指向的地方就是栈段,但是把内存当作栈段只是我们编程时的一种安排。

 

进程P2调用P1进程,P1进程结束返回到P2进程,使用mov ax,4c00Hint 21H

 

 

链接作用:

1.当源程序很大,多个.c文件时,汇编/编译后对应多个.o文件,通过链接将它们链接成可执行文件

2.程序中调用某库文件中函数时(stdio.h中print),须将库文件和.o文件链接到一起

3.本身.o文件中机器码也不能直接升成可执行文件

 

用户使用shell来操作计算机系统工作,达到人机交互,只要是人与电脑之间交互的接口,就可以称为 Shell

 

标号:程序入口地址

assum cs:xxx

xxx segment

XXX(标号):

       assembly code

xxx ends

end XXX(标号)

 

 程序加载进内存后

cs和ds会有个差值,将cs和ds的值化到物理地址,两者差值大小为256byte,该区域作为PSP(为了调用进程和被调用进程通信)

 

   Done!!!

posted on 2017-08-01 21:41  chaunceyctx  阅读(178)  评论(0编辑  收藏  举报

导航