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