结构
Words are light, show me the codes!
exp1.asm
键入20字符到缓冲区,使用MASM
特别注意:NASM某些语法和MASM不同,并且NASM区分大小写
.586;实方式
DATAS SEGMENT use16;16位段
n equ 20;可输入20个字符,byte类型
buf db n+1;第一字段,1byte,检查,n+1因为要存放回车
count db 0;第二字段,1byte,计数器
char db n+1 dup(0);第三字段,重复定义n+1个byte类型的char,值为0,实际存放的地方
print db 'please input:',13,10,'$';提示输入,13光标回行首,10换行,$指向输出
DATAS ENDS
STACKS SEGMENT use16
db 256 dup(0);
STACKS ENDS
CODES SEGMENT use16
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
lea dx,print;取ea
mov ah,9;输出
int 21h;软中断,此处输出输入提示
lea dx,buf;取buf的ea
mov ah,0ah;缓冲区键入
int 21h;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
奇妙杂谈,关于$和org
$ 汇编地址计数器,标示汇编程序当前工作位置
源程序有多个段,每个段分配一个初值为0的$,然后 $按照存储单元数和目标代码长度增值.即, 当前 $的值是段内所有变量和标号的偏移地址之和.
然后说到org,举两个例子
第一个栗子org 5;令 $=5
第二个栗子org $+5;令 $= $+5,即,空出5byte