求解释汇编一道题

mengliu2010 2011-04-15 09:11:42
本人刚学习汇编 有一道题说是从键盘接受一串字符,然后逆序显示出字符 我的代码如下(是想将字符串在内存中调换顺序,然后输出)
dseg segment
w_buf db 'Please input$'
buf db 30,?,30 dup(?)
dseg ends
sseg segment stack
stk db 100 dup(?)
sseg ends
cseg segment
assume cs:cseg,ds:dseg,ss:sseg
start:
mov ax,dseg
mov ds,ax
LEA dx,w_buf
mov ah,9
INT 21H
LEA DX,buf
MOV AH,10
INT 21H
mov bx,offset buf
INC BX
xor CH,CH
mov CL,[BX]
mov SI,offset buf+1
ADD SI,CX
INC BX
lop: cmp BX,SI
JAE EXIT
mov AL,[BX]
mov AH,[SI]
mov [BX],AH
mov [SI],AL
INC BX
DEC SI
JMP lop
EXIT:
LEA DX,buf+2
mov ah,9H
INT 21H
mov AH,4ch
int 21H
cseg ends
end start
输出的结果是乱码 求解释
...全文
110 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
masmaster 2011-04-15
  • 打赏
  • 举报
回复
int 21h的9号功能显示的是以$结尾的字符串。
简单的方法是利用栈的特性,来实现题目要求, 例如:


d:\masm>type revstr.asm
;
;This Program Compiled Sucess by Masm 6.15
;
assume cs:code,ds:data,ss:stack
data segment
buffer db 100,?,100 dup (0);定义输入缓冲区
data ends
stack segment stack
db 64 dup (0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
xor cx,cx
mov dx,offset buffer
mov ah,10
int 21h
;将缓冲区字符入栈
xor ax,ax
mov cl,buffer+1
mov bx,offset buffer+2
is:
mov al,[bx]
push ax
inc bx
loop is
;显示换行
mov ah,2
mov dl,0dh
int 21h
mov dl,0ah
int 21h
;出栈并显示
mov cl,buffer+1
mov ah,2
os:
pop dx
int 21h
loop os

mov ah,4ch
int 21h

code ends
end start

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧