汇编-----代码分段
2018-05-03 本文已影响0人
那时J花开
8086 伪指令
assume cs : code
code segment
db 1,2,3,4,5,6,7,8,9 ; 这里创建的字节就存放在code段中, 类似于高级语言中的全局变量, 在整个代码段中都可以拿到
dw 'hello'
dw "word" ; 在汇编中 ''与""含义相同
; 退出程序
mov ah, 4cH
int 21H
code ends
end
- db(define byte) 自定义一个字节
- dw(define word) 自定义一个字(2byte)
- assume 告诉编译器 这个segment是什么段
- 不过上述代码的问题在于, 既然是代码段, 那么CPU会将里面所有的数据当做指令去处理, 所以ip的初始值是0000H.
- 那么怎么去让CPU从dw后边去执行呢?
assume cs : code
code segment
db 1,2 ; 这里创建的字节就存放在code段中, 类似于高级语言中的全局变量, 在整个代码段中都可以拿到
dw 'hello'
dw "word" ; 在汇编中 ''与""含义相同
db 20 dup(0) ; 定义20个字节的内存空间, 里面全部存放0
start:
mov al, cs:[0]
mov ah, 0
; 退出程序
mov ah, 4cH
int 21H
code ends
end start ; start 告诉编译器, 真正的代码段从start开始执行, 也就是ip为000bH
- db 20 dup(0): 定义20(N)个字节的内存空间, 里面全部存放0(00H)
assume cs:code, ds:data, ss:stack
stack segment
db 20 dup(1) ; 定义20个字节作为栈段
stack ends
data segment
db 20 dup(2)
age dw 20H ; 定义两个字节 存放0020H age为标号 标号中存放着地址
data ends
code segment
start:
mov ax, 1122H
mov age, ax ; 将ax放入age标号所记录的地址中 相当于mov [20], ax
code end
end start