学习了Intel 8080结构之后,我现在正在尝试学习Intel 8086以及这里的程序布局。现在,即使看基本的例子也是相当令人畏惧的,更糟糕的是,我无法理解我遇到的两种写8086代码的不同方式。也就是说,有时我看到:
.model small
.stack 100h
.code
start:
mov dl, ‘a’ ; store ascii code of ‘a’ in dl
mov ah, 2h ; ms-dos character output function
int 21h ; displays character in dl register
mov ax, 4c00h ; return to ms-dos
int 21h
end start
我也发现:
Progr segment
assume cs:Progr, ds:dataSeg, ss:stackSeg
start: mov ax,dataSeg
mov ds,ax
mov ax,stackSeg
mov ss,ax
mov sp,offset top
mov ah,4ch
mov al,0
int 21h
Progr ends
dataSeg segment
dataSeg ends
stackSeg segment
dw 100h dup(0)
top Label word
stackSeg ends
end start
显然,我知道这两个做的事情非常不同,但令我困惑的是它们的一般语法有多么不同。在后者中,我们有一些"segment assume",而在前者中只有.model、.stack和.code(有时还有.data,据我发现)。它们有区别吗?我可以随意选择哪一个更适合我吗?前者看起来更容易理解和更清晰,但我可以用它来替代后者吗?