8089汇编 源程序
汇编程序:包含汇编指令和伪指令的文本。
汇编语言由汇编指令和伪指令构成,想要组合成源程序进行编译就需要这么做。
汇编指令
- 对应有机器码的指令,可以被编译为机器指令,最终被CPU执行
伪指令
- 没有对应的机器码的指令,最终不被CPU所执行。
- 指导编译器将汇编语言转换为机器码。
源程序说明
一、程序案例
assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends
end
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5CZkZTYzUDZ5MDM3ETO4EjMxUTZ0EGNjZWZhJ2N5E2Mz8CX3AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.gif)
;注释:”;“分号
;设置创建的段与寄存器关联 cs:code,ds:data,ss:stack
assume cs:code,ds:data,ss:stack
;设置段 data
data segment
dw 0123H,0456H,0789H,0abcH,0defH
;结束段 data
data ends
;设置段 stack
stack segment
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;结束段 stack
stack ends
;设置段 code
code segment
mov ax,stack
mov ss,ax
mov sp,20h ;设置栈段
mov ax,data
mov ds,ax ;设置数据段
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
....
;结束段 code
code ends
;结束程序
end
源程序 说明
二、代码解析
1、含义
段定义
- 一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。
- 一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。
- 定义程序中的段:每个段都需要有段名。
段名 segment ——段的开始
....
段名 ends ——段的结束
end (不是ends)
- 汇编程序的结束标记。若程序结尾处不加end,编译器在编译程序时,无法知道程序在何处结束。
assume(假设)
- 含义是假设某一段寄存器和程序中的某一个用 segment … ends 定义的段相关联——assumecs:codesg指CS寄存器与codesg关联,将定义的codesg当作程序的代码段使用。
2、说明
3、源程序经编译连接后变为机器码
源程序设计
一、案例:编程求2的3次方
; ① 定义一个段
abc segment
abc ends
; ② 实现处理任务
abc segment
mov ax,2
add ax,ax
add ax,ax
abc ends
; ③ 指出程序在何结束
abc segment
mov ax,2
add ax,ax
add ax,ax
abc ends
end
; ④ 段与段寄存器关联
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,ax
abc ends
end
; ⑤ 加上程序返回的代码
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,ax
mov ax,4c00h
int 21h
abc ends
end