@guoxs
2016-04-24T08:03:42.000000Z
字数 687
阅读 2725
汇编语言
assume cs:codesg #伪指令,由编译器执行
codesg segment
mov ax,0123H #机器指令,由CPU执行
mov bx,0456H
add ax,bx
add ax,zx
mov ax,4c00H #程序返回
int 21H
codesg ends
end #end是一个汇编程序结束的标记,程序写完后必须加上
一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或被当做栈空间来使用。
在程序中,使用 “codesg segment ... codesg ends” 定义了一个名为codesg的段,在这个段中存放的代码,所以这个断是一个代码段。在程序的开头,用assume 参cs:codesg将用作代码段的段codesg和CPU中的段寄存器cs联系起来。
程序编译连接后变为机器码:
与结束相关的概念:
目的 | 相关指令 | 指令性质 | 指令执行者 |
---|---|---|---|
通知编译器一个段结束 | 段名 ends | 伪指令 | 编译时,由编译器执行 |
通知编译器程序结束 | end | 伪指令 | 编译时,由编译器执行 |
程序返回 | mov ax,4c00H int 21H | 汇编指令 | 执行时,由CPU执行 |
汇编语言从写到执行的过程
编程(Edit) ——> 1.asm ——> 编译(masm) ——> 1.obj ——> 连接(link)——> 1.exe ——> 加载(command)——> 内存中的程序 ——> 运行(CPU)
DOS系统中.exe文件中程序的加载过程:
(1) 程序加载后,ds 中存放着程序所在内存区的段地址,这个内存的偏移地址为0,则程序所在的内存区的地址为 ds:0
(2) 这个内存区的前256个字节中存放的是PSP,DOS用来和程序进行通信。从256字节出向后的空间存放的是程序。