我已经学习了编译器和汇编语言,所以我想编写自己的汇编程序作为练习。但我有一些问题;
如何计算@DATA 或 OFFSET/ADDR VarA 等段的地址?
以一个简单的汇编程序为例:
.model small
.stack 1024
.data
msg db 128 dup('A')
.code
start:
mov ax,@data
mov ax,ds
mov dx, offset msg
; DS:DX points at msg
mov ah,4ch
int 21h ; exit program without using msg
end
Run Code Online (Sandbox Code Playgroud)
那么汇编器是如何计算段的段地址的@data呢?
它如何知道将什么放入立即数mov dx, offset msg?
compiler-construction assembly masm memory-segmentation x86-16