汇编中的倒序输出
1、INT 21H的1号功能进行字符输入。
- 存放在数据段,倒序输出。
DATAS SEGMENT
MAXL DB 30 ;定义字符串大小做计数
RLEN DB ? ;保存实际长度
STR1 DB 30H DUP(?);分配内存空间
DATAS ENDS
STACKS SEGMENT
DW 60HDUP(?);分配堆栈空间
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 CL,MAXL
XOR CH,CH ;高八位清零
LEA SI,STR1
;初始化
L1: MOV AH,1
INT 21H ;输入
CMP AL,0DH ;判断是否为回车输入结束
JE FIN
MOV [SI],AL
INC SI
LOOP L1
FIN:MOV CX,SI
SUB CX,OFFSET STR1;计数循环输出次数
MOV RLEN,CL;实际输入个数保存
L2: DEC SI
MOV DL,[SI]
MOV AH,2
INT 21H
LOOP L2;逆序输出
MOV AH,4CH
INT 21H
CODES ENDS
END START
- 利用堆栈倒序输出。
DATAS SEGMENT
;无数据段定义
DATAS ENDS
STACKS SEGMENT
DW 60HDUP(?);分配堆栈空间
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
XOR CX,CX ;CX清零
;初始化
L1: MOV AH,1
INT 21H ;输入
CMP AL,0DH ;判断是否为回车输入结束
JE L2
PUSH AX
INC CX
JMP L1
L2: POP DX
MOV AH,2
INT 21H
LOOP L2 ;输出
MOV AH,4CH
INT 21H
CODES ENDS
END START
2、INT 21H的0A号功能进行字符串输入。利用堆栈操作。
DATAS SEGMENT
BUFF DB 50
DB ?
DB 50 DUP(?) ;缓冲区
STR0 DB 0DH,0AH,24H
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
;初始化
LEA DX,BUFF
MOV AH,0AH
INT 21H;输入
LEA DX,STR0
MOV AH,9
INT 21H;回车换行
MOV BX,OFFSET BUFF
INC BX
MOV CL,[BX];字符串实际个数存放到CL寄存器中
MOV AL,CL
XOR CH,CH
NEXT: INC BX
PUSH [BX];压栈存储
LOOP NEXT
MOV CL,AL
DISP: POP DX;逐个弹出
MOV AH,2
INT 21H
LOOP DISP
MOV AH,4CH
INT 21H
CODES ENDS
END START
关于逆序输出就可以尽量考虑堆栈。
个人笔记,请多指教。