您的位置:首页 > 其它

[汇编笔记]一个接受输入的字符串并反向输出的程序分析

2008-10-07 16:18 501 查看
一个接受输入的字符串并反向输出的程序分析

by shile

文章排版真的很不好弄。

代码:

.model small
.386
DATA segment
msg1 db 'Please input a string.',0DH,0Ah,'$'
buf db 100, 0 ,100 DUP (0)
crlf db 0Dh,0Ah,'$'
DATA ends

STACK segment
DB 20 DUP (0)
STACK ends

CODE segment
assume cs:CODE,ds:DATA,ss:STACK
START:
mov ax,DATA
mov ds,ax
lea dx,msg1 ;输出提示文字
mov ah,9
int 21h
lea dx,buf
mov ah,0Ah ;接受字符串
int 21h
mov dx,offset crlf
mov ah,9 ;输出字符串中断
int 21h
mov bl,buf+1;字符串长度送到bl
mov bh,0
cmp bx,0
jz EXIT
L1:mov dl,buf+1[bx] ;把最后一位送到dl
mov ah,2 ;输出一个字符中断
int 21H
dec bx ;倒着输出字符
jnz l1
EXIT:mov AH,4CH
int 21H
CODE ends
END START

假设文件名是asm2.asm

用masm611编译即可运行.

编译步骤:

masm asm2.asm

link asm2.obj;

运行结果:

D:/MASMWO~1>asm2
Please input a string.
asdfsa
asfdsa
D:/MASMWO~1>asm2
Please input a string.
this is a joke!
!ekoj a si siht

程序的原理是利用了下面的int21H中断:

(2)、功能02H

功能描述:向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,则将无法判断磁盘是否满
入口参数:AH=02H
DL=待输出字符的ASCII码
出口参数:
(8)、功能0AH

功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾
入口参数:AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
  1、第一个字节为缓冲区的最大容量,可认为是入口参数;
  2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
  3、从第三个字节开始存放实际输入的字符串;
  4、字符串以回车键结束,回车符是接受的最后一个字符;
  5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。
例如:
  BUFF 80, ?, 80 DUP(?)   ;最多接受80个字符
出口参数:

(7)、功能09H

功能描述:输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满
入口参数:AH=09H
DS:DX=待输出字符的地址
说明:待显示的字符串以’$’作为其结束标志
出口参数:
(5)、功能4CH

功能描述:终止程序的执行,并可返回一个代码
入口参数:AH=4CH
AL=返回的代码
出口参数:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐