SCAU 汇编实验二 利用INT21H的2号、1号、A号功能完成输入和倒序输出
1.编写一个程序,使用INT 21H的2号功能,实现“hello,world!”的显示
DATAS SEGMENT
STRING DB 'Hello World!',0AH, 0DH,24H
DATAS ENDS
STACKS SEGMENT
DW 20H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV BX,DATAS
MOV DS,BX
LEA SI,STRING
L1:
MOV DL,[SI] ;利用变址寄存器进行地址的偏移变化
MOV AH,2
INT 21H
INC SI
CMP DL,0AH ;检测到回车停止输出
JNE L1
MOV AH,4CH ;结束程序
INT 21H
CODES ENDS
END START
2.使用INT 21H的1号功能,输入一个字符串“Hello,world!”,存放在内存,然后倒序输出
;利用栈解决问题
DATAS SEGMENT
COUNT DB 0
DATAS ENDS
STACKS SEGMENT
DW 100H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
L1: MOV AH,1
INT 21H
CMP AL,0DH
JE L2 ;分支结构
PUSH AX ;不是回车就push
INC COUNT
JMP L1
L2: POP DX
MOV AH,2
INT 21H
DEC COUNT
MOV CL,COUNT
CMP CL,0 ;count清零就pop完了
JNE L2
MOV AH,4CH ;结束程序
INT 21H
CODES ENDS
END START
3.使用INT 21H的A号功能,输入一个字符串“Hello,world!”,存放在内存,然后倒序输出
DATAS SEGMENT
DATAS ENDS
STACKS SEGMENT
DW 100H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
MOV AH, 0AH
INT 21H ;INT 21H 的0A号功能
MOV SI,DX
MOV AL, DS:[SI+1] ;获取输入缓冲区的字符总个数
CBW ;不拓展待会没法加进变址寄存器中
ADD SI,2 ;DS:[SI+2]为输入的字符串首地址
MOV DI,SI ;将字符串首地址copy,方便待会倒叙输出时作为cmp的结束依据
DEC DI ;DI作为字符串首地址,不自减1没法输出首字符
ADD SI,AX ;AX经过cbw,里面存储着字符总个数,以此获取字符串最后一个字符的地址
SUB AX,AX
L1: MOV DL,DS:[SI]
DEC SI
MOV AH,2
INT 21H
CMP SI,DI
JNE L1
MOV AH,4CH ;结束程序
INT 21H
CODES ENDS
END START