保持微型计算机正常运行必不可少的输入输出设备
outstr macro string ;定义宏,用以输出字符串。不定义可以
local next,tmp
ifnb
jmp next
tmp db '&string','$'
next: push ax
push dx
push ds ;保护寄存器
mov ax,seg tmp
mov ds,ax
mov dx,offset tmp
mov ah,09h
int 21h
pop ds
pop dx
pop ax
endif
endm
br macro ;定义宏进入回车换行
push ax
mov ah,0eh
mov al,0dh
int 10h ;调用bios输出换行符
mov al,0ah
int 10h ;调用bios输出回车符
pop ax
endm
buffersize = 20 ;设置数据缓冲区大小
dseg segment 'data' ;定义数据段
buffer db buffersize,?,buffersize dup(0);串实践最长为buffersize-1
dseg ends
sseg segment stack ;定义栈
db 1024 dup(0)
sseg ends
cseg segment 'code'
assume cs:cseg
start: outstr ;调用宏输出提示,有的环境不支持中文,那么,就用英文代替<>中的内容
mov ax,dseg
mov ds,ax
mov dx,offset buffer ;设置ds:dx对准缓冲区
mov ah,0ah
int 21h ;调用系统功能,输入串
;为输入的字符串设置串结束标志,以供串输出使用
mov bx,dx
add bl,ds:1[bx]
adc bh,0
mov byte ptr ds:2[bx],'$'
add dx,2 ;使用dx对准串头
;串结束设置完成。下面进行验证
br ;先输出回车换行
outstr
mov ah,09h
int 21h
;下面进行用户交互
br ;输出回车
outstr
mov ah,0h
int 16h ;用键盘读入一个字符到al
cmp al,'1'
je next
br
outstr
br
jmp start ;如果用户输入的为数字1,则继续执行下面的代码,否则重新执行上面的代码
;下面进行串序颠倒
next: mov di,dx ;使di指向串头
lea si,ds:1[bx];si指向串尾
xor cx,cx
mov cl,ds:[di-1];把实践输入的串的长度存入cx
shr cx,1 ;cx除以2
lp: mov al,[si] ;开始交换数据
xchg al,[di]
mov [si],al ;完成一对数
据的交换
inc di
dec si
loop lp
;输出结果
br ;先输出一个回车换行
outstr
mov ah,9h
int 21h
mov ax,4c00h
int 21h
cseg ends
end start