显存中某区域改变,显示器便会在对应区域改变
出入栈以字为单位, 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,4c00H 和 int 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!!!