assume cs:code,ds:data data segment buffer db 'xxxx$' data ends code segment rkmain proc mov ax,data mov ds,ax mov dx,offset buffer mov ah,09H int 21H mov ah,07H int 21H mov ax,4c00H int 21H rkmain endp start:call rkmain code ends end start
16位汇编声明字符串
buffer db 0DH,0AH, xxxxx$'
这里db是define byte的缩写,意为buffer变量定义为一字节长度
0ah和0dh组合起来是换行的意思,$经常时字符串的结束标记
段寄存器的赋值
必须通过通用寄存器。
若使用mov ax,data是立即数寻址方式,而立即数是不允许直接送段寄存器的。所以需要通过先送立即数到寄存器,再从寄存器到段寄存器,即mov ax,data mov ds,ax
offset
回送变量或标号的偏移地址值,功能和lea指令类似,效率更高一些
DOS的0AH号功能调用
比如在数据段有如下定义:
buff db 5,0,5 dup(0)
这里的5表示字符串最大长度为5个字符;0占用的那个字节在调用结束后会被放入实际输入的字符个数;5 dup(0)开辟5个字节单元,存放输入的字符的ASCII码。
在代码段用下面的指令进行调用:
lea dx,buff
mov ah,0ah
int 21h
运行时输入“ABC”
则调用结束后,内存的buff单元的内容应该是:05H,03H,41H,42H,43H,00H,00H