完整段定义1

data segment     ;数据段    与段简化定义不同,除了代码段之外都要将相应段装入段寄存器
mess db 'fenglei'
lh equ $-mess   ;长度
data ends

extra segment   ;代码段
mess1 db 7 dup(?)
extra ends

stack segment stack    ;堆栈段   得给sp赋值
pe db 100 dup(?)
stack ends

code segment
assume cs:code,ds:data,es:extra,ss:stack    ;确定cs,ds,es,ss指向的逻辑段
main proc far      ;使用过程,主程序开始
;push ds            ;为程序返回dos设置堆栈值,入栈保存原ds地址,  和ret搭配 但不好使
;mov ax,0                     ;设置偏移地址为0
;push ax                     ;入栈保存偏移地址

mov ax,data       ;段装入相应的段寄存器
mov ds,ax
mov ax,extra
mov es,ax
mov ax,stack
mov ss,ax
mov sp,8   ;设置sp,因为堆栈是字寻址的0,2,4,6。。。。。

mov bx,1   ;bx置标准设备号1
mov cx,lh   ;cx是输入串的长度
mov dx,offset mess
mov ah,40h
int 21h


;ret           ;用过程返回dos操作系统
mov ah,4ch
int 21h
main endp     ;主程序结束
code ends      ;代码段结束
    end main     ;汇编结束   end [标号|过程名]  必须有end ,如果是子过程,没有标号和过程名 只有end



原文地址:https://www.cnblogs.com/nanfengnan/p/13879019.html