2.1w+
社区成员
data segment
user_string db 100,0,10 dup(?)
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax ;把数据段寄存器赋值给ds
lea dx,user_string ;建立输入字符串缓冲区
mov ah,0Ah ;
int 21h ;ah=0aH 请求键盘输入到缓冲区中断
xor si,si ;si清零
xor bx,bx ;bx清零
mov bx,dx ;把缓冲区的地址给bx
mov cx,[bx+si+1] ;看这个就是"寄存器间接寻址方式"
xor ch,ch ;其目的就是取实际输入字符个数
mov di,cx
lop: mov ah,2;ah=2H 请求输出dl中的值
mov dl,[bx+di+1];看这又是"寄存器间接寻址方式"
int 21h ;其目的就是取输入字符串的最后一个字符
dec di
loop lop ;依次循环倒着输出字符 loop循环又cx控制循环次数;
mov ah,4ch ;ah=4cH 带返回码结束 返回码存放在al中
int 21h
code ends
end start
_TEXT segment word public 'CODE'
assume cs:_TEXT,ds:_DATA,ss:_STACK
addem proc far
mov ax,_DATA
mov ds,ax
mov ax,a
mov ax,b
mov c,ax
mov ax,4c00h
int 21h
addem endp
_TEXT ends
_DATA segment word public 'DATA'
a dw 3
b dw 4
c dw ?
_DATA ends
_STACK segment para stack 'STACK'
db 128 dup(?)
_STACK ends
end addem
reversalstr PROC NEAR string
PUSHAD
MOV ESI, string
MOV EDI, ESI
_L1:
LODSB
CMP AL, 0
JNE _L1
DEC ESI
_REL:
DEC ESI
CMP ESI, EDI
JBE _END
MOV AL, BYTE PTR [ESI]
MOV AH, BYTE PTR [EDI]
MOV BYTE PTR [ESI], AH
STOSB
JMP _REL
_END:
POPAD
MOV EAX, string
RET
reversalstr ENDP
reversalstr PROC NEAR string
MOV ESI, string
MOV EDI, ESI
_L1:
LODSB
CMP AL, 0
JNE _L1
DEC ESI
_REL:
DEC ESI
CMP ESI, EDI
JBE _END
MOV AL, BYTE PTR [ESI]
MOV AH, BYTE PTR [EDI]
MOV BYTE PTR [ESI], AH
STOSB
JMP _REL
_END:
MOV EAX, string
RET
reversalstr ENDP