MASM汇编中伪指令ASSUME的作用

发布时间 2023-08-30 18:58:46作者: 美洲象

  在学习16位MASM宏汇编时,开始犯的一个错误就是认为assume就是给CS、SS、DS等段寄存器进行初始化赋值的。但又需要在源码的开始阶段,通过mov ax,datasg和mov ds,ax对DS进行手动赋值,assume ds:datasg不是已经赋值过了么,倍感疑惑!

  比如下面代码:

assume cs:codesg,ss:stacksg,ds:datasg1,es:datasg2
;-------------------------------------------
stacksg segment stack
    db 100 dup (0)
stacksg ends
;-------------------------------------------
datasg1 segment
    tmsg db "hello,world!",13,10,'$'
datasg1 ends
;-------------------------------------------
datasg2 segment
    tnum dw 9
datasg2 ends
;-------------------------------------------
codesg segment
    start:
    mov ax,datasg1
    mov ds,ax
    mov ax,datasg2
    mov es,ax

    mov ax,tnum

    mov ax,4c00h
    int 21h
codesg ends
end start

 一、伪指令的概念

  伪指令就是编译器(masm)将汇编代码编译成机器码的,为编译器提供信息,本身并不生成相应的机器码。