[关闭]
@guoxs 2016-04-24T00:03:42.000000Z 字数 687 阅读 1193

编写汇编程序

汇编语言


  1. assume cs:codesg #伪指令,由编译器执行
  2. codesg segment
  3. mov ax,0123H #机器指令,由CPU执行
  4. mov bx,0456H
  5. add ax,bx
  6. add ax,zx
  7. mov ax,4c00H #程序返回
  8. int 21H
  9. codesg ends
  10. 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文件中程序的加载过程:

DOS系统中.exe文件中程序的加载过程

(1) 程序加载后,ds 中存放着程序所在内存区的段地址,这个内存的偏移地址为0,则程序所在的内存区的地址为 ds:0
(2) 这个内存区的前256个字节中存放的是PSP,DOS用来和程序进行通信。从256字节出向后的空间存放的是程序。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注