第一个程序
一个源程序从写出到执行的过程
编写汇编源程序-》 编译连接-》执行
源程序
assume cs:codesg #假设cs寄存器关联codesg
codesg segement #codesg 为标识符 segement 为关键字, 标示段开始
mov ax, 0123H
mov bx, 0456H
add ax, bx
add ax,bx
# 下面2个是固定的,程序返回。也就是返回调用程序。
mov ax, 4c00H
int 21H
codesg ends #codesg 为标识符 ends 为关键字, 标示段结束
end # 程序结束
两种指令:
-
汇编指令,能翻译成机器码的指令。
-
伪指令,不能翻译成机器码的指令。。给编译器用的。。
- 段
段名 segment .... 段名 ends
为一段位指令。 一个汇编程序由多个段组成,譬如代码段,数据段,栈段。有意义的汇编程序至少有代码段。
- end 表示程序结束。
- assume 假设。它假设某个段寄存器 和 程序中的某个段关联。
-
标号。如codesg。
程序的结构:
至少一个段,一个end。可选的assume
编辑源程序
就用求
2
3
2^3
23示例。文件名1.asm
assume cs:codesg
codesg segment
mov ax,2
add ax,ax
add ax,ax # 也没啥意义,又没有输出
mov ax, 4c00H
int 21H
codesg ends
end
编译、连接
masm 1.asm #编译 生成1.obj
link 1.obj #连接, 生成1.exe
1.exe #运行
以简化的方式进行编译和连接
masm 1; #编译 生成1.obj
link 1; #连接, 生成1.exe
1.exe #运行
谁将可执行文件中的程序装载进入内存并使它运行?
调试程序
debug 1.exe
SA:0 为 PSP开始地址。PSP为256字节,dos利用psp和加载的程序通信。
然后才是加载的程序的入口:CS:IP,
空闲内存区: SA:0
PSP区:SA:0 (DS)
程序区:SA+10H:0 (CS:IP)
debug调试到int 21H
时,需要用p
命令。