汇编的镜子程序 求注释

来源:百度知道 编辑:UC知道 时间:2024/06/19 02:34:31
stack segment stack'stack'
dw 32 dup(0)
stack ends
data segment
OBUF DB'>',0DH,0AH,'$'
IBUF DB 0FFH,0,255 DUP(0)
data ends
code segment
begin proc far
assume ss: stack,cs:code,ds:data
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
MOV DX,OFFSET OBUF
MOV AH,9
INT 21H
MOV DX,OFFSET IBUF
MOV AH,10
INT 21H
MOV BL,IBUF+1
MOV BH,0
MOV IBUF[BX+2],'$'
MOV DL,0AH
MOV AH,2
INT 21H
MOV DX,OFFSET IBUF+2
MOV AH,9
INT 21H
ret
begin endp

stack segment stack'stack' ;定义堆栈段
dw 32 dup(0) ;定义32个字的堆栈空间
stack ends ;结束堆栈段定义
data segment ;定义数据段
OBUF DB '>',0DH,0AH,'$' ;定义“回车、换行”字符串
IBUF DB 0FFH,0,255 DUP(0) ;定义字符串输入缓冲区
data ends ;结束数据段定义
code segment ;定义代码段
begin proc far ;定义远程调用子程序
assume ss: stack,cs:code,ds:data ;段寄存器关联说明
push ds ;入栈保存子程序返回段地址
sub ax,ax ; 子程序返回偏移地址
push ax ;入栈保存子程序返回偏移地址
mov ax,data ;取数据段段址
mov ds,ax ;给数据段寄存器赋值
MOV DX,OFFSET OBUF ;“回车、换行”字符串地址
MOV AH,9 ;DOS功能调用9号功能:显示以“$”为结束标志的字符串
INT 21H ;DOS功能调用
MOV DX,OFFSET IBUF ;字符串输入缓冲区地址
MOV AH,10 ;DOS功能调用10号功能:键盘输入不超过指定长度的字符串
INT 21H ;DOS功能调用
MOV BL,IBUF+1 ;读入实际输入的字符串长度(字符个数)
MOV BH,0 ;基址寄存器高