[汇编笔记]一个接受输入的字符串并反向输出的程序分析
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
(8)、功能0AH
(7)、功能09H
(5)、功能4CH
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码 | |
出口参数: | 无 |
功能描述: | 从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾 | |
入口参数: | AH=0AH DS:DX=存放输入字符的起始地址 接受输入字符串缓冲区的定义说明: 1、第一个字节为缓冲区的最大容量,可认为是入口参数; 2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数; 3、从第三个字节开始存放实际输入的字符串; 4、字符串以回车键结束,回车符是接受的最后一个字符; 5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。 例如: BUFF 80, ?, 80 DUP(?) ;最多接受80个字符 | |
出口参数: | 无 |
功能描述: | 输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满 | |
入口参数: | AH=09H DS:DX=待输出字符的地址 说明:待显示的字符串以’$’作为其结束标志 | |
出口参数: | 无 |
功能描述: | 终止程序的执行,并可返回一个代码 | |
入口参数: | AH=4CH AL=返回的代码 | |
出口参数: | 无 |
相关文章推荐
- 华为2写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
- 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
- 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
- 华为计算字符个数写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
- 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
- oj:写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写
- 2.写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
- 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
- 3.写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
- 通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1、操作数为
- 通过键盘输入100 以内正整数的加、减运算式,请编写一个程序输出运算结果字符串
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”);
- C语言 字符串 编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
- 习题 6.14 编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2, 输出0;若s1<s2,输出一个负数。不要用strcmp函数。两个字符串用gets函数输入。
- 接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写
- 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
- 机试题:过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
- 编写一个程序,接受用户输入的一段英文文字后,输出其中的字符数、单词数和句子数(设句子以"?"、"!"、"."结束)。
- 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“