为什么手机百度输入法比搜狗手机输入法输入法好用?

题目:输入一个字符,找出它的前导字符和后续字符,并按顺序显示这三个字符。
要求:程序从键盘接收用户输入的一个字符后,然后分别找出它的前导字符和后续字符,再按顺序显示这三个字符。在用户输入和显示字符之前都要有相应的提示信息。
提示:从AL寄存器得到它的ASCII码,它的前导字符和后续字符的ASCII码分别比它的ASCII码少1或多1。然后分别显示这三个字符。
知识覆盖:计算机数据的存储方式。8位,16位,32位寄存器的使用选择。
这里选择了8位al,bl,cl寄存器。因为ASCII码的表示为8bit。所以处理起来也比较方便。
1 ; Example assembly language program --
2 ; Author:
revised 5/2014
6 .MODEL FLAT
8 ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
10 INCLUDE io.h
; header file for input/output
; carriage return character
; line feed
; reserve 4096-byte stack
BYTE "Please Enter a char ",cr,Lf,0
BYTE "The three char is "
BYTE cr,Lf,0
befchar BYTE 1 DUP(?)
BYTE 1 DUP(?)
aftchar BYTE 1 DUP(?)
26 _start:
output promot
input char,1
;只会处理最后一个字符
befchar,al
aftchar,al
output answer
output befchar
;依次输出befchar char aftchar
ExitProcess, 0
; exit with return code 0
51 PUBLIC _start
; make entry point public
; end of source code
以上代码运行完整。
阅读(...) 评论()从键盘输入字符串并输出该字符串(汇编程序)
DATAS SEGMENT
STR&& DB"please
string:$"&&&
BUF&& DB 20
DB 20 DUP (?)
0AH,0DH,"$";此处输入数据段代码&
DATAS ENDS
STACKS SEGMENT
200 DUP(?) ;此处输入堆栈段代码
STACKS ENDS
CODES& SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS
LEA DX,STR
LEA DX,BUF
LEA DX,CRLF
MOV CL,BUF+1
LEA SI,BUF+2
NEXT:& MOV DL,[SI]
JNZ NEXT;此处输入代码段代码&
MOV AH,4CH
CODES& ENDS
以上是从键盘输入字符串并输出该字符串的简单汇编程序,我们老师的要求是将程序中的2号调用改成9号调用,本人还在思考中,有能解决此问题的请回复,谢谢!
如果我了解了该题答案,一定和大家共享。
我们汇编老师的教学是先让我们看程序,写程序,再讲基本指令,基本结构……
学习汇编重要的是掌握CPU结构、程序结构以及熟练的掌握7种指令的运用。
以下是本人整理的对上面程序的部分解释:
BUF:键盘缓冲区BUF。
DB:定义变量的类型为字节类型。
20:表示缓冲区能容纳20个字符。
DB 200 DUP(?)中的问号:不对分配的存储单元初始化。
DS:存放当前数据段的段地址。
CS:存放当前代码段的段地址。
&&&&SS:存放当前堆栈段的段地址。
MOV:传送指令。
AX:存放接收到的数据或发送数据。
DX:使用间接寻址时存放端口地址。
LEA:取偏移地址。
CL:在移位指令和循环移动指令中,存放移位次数或者循环移位次数。
SI:在存储器寻址时,作为变址寄存器。在串操作中,作为源串指针。
DEC:decrement。
INC:increment。
&&&&INT:interruput。
STR&& DB"please
string:$"&&
;这里的20为指定存放字符的个数(理论上的)
;这的?可变,实际存放字符的个数(系统自动计算)
;这里的20是你在数据段开辟的空间&&&&&&&&&&&
CRLF& DB 0AH,0DH,"$";回车换行;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
200 DUP(?) ;此处输入堆栈段代码
STACKS ENDS
CODES& SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS
;9号中断前提,给参数DX赋值,指定输出字符串所在的有效地址
;10号中断,接收输入字符串,此时DX为存放字符串的有效地址
LEA DX,BUF
LEA DX,CRLF
CL,BUF+1&&&
;获取字符串中字符的个数
SI,BUF+2&&&
NEXT:& MOV DL,[SI]
AH,2&&&&&&&
;2号中断输出单个字符
;输出一个地址往后加1
;顺便减少输出的次数
NEXT&&&&&&&
;此处输入代码段代码
MOV AH,4CH
CODES& ENDS
2号调用是逐个显示字符,9号调用是一次完成字符串的显示,但结尾得加上&'$'。最上面程序中用的2号调用,使用循环输出字符串。要将2号调用改为9号调用,必须改程序中的循环结构为顺序结构。很明显,程序中的
都要去掉。
所以问题简化为改
MOV DL,[SI]
部分为9号调用,以及在9号调用后加上'$'。
以下是在编程爱好者论坛上请教别人加上自己的整理得出的答案,并非最简。
DATAS SEGMENT
STR&& DB 'please
input a string:$'&
BUF&& DB 20
DB 20 DUP (?)
CRLF& DB 0AH,0DH,"$"
;此处输入数据段代码&
DATAS ENDS
STACKS SEGMENT
200 DUP(?) ;此处输入堆栈段代码
STACKS ENDS
CODES& SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS
LEA DX,STR
LEA DX,BUF
LEA DX,CRLF
;开始改的部分
bl,BUF+1&&&&&&&&&&
;输出这里开始
bh,0&&&&&&&&&&&&&&
si,BUF+2&&&&&&&&&&
mov byte ptr[si+bx],'$';结尾得加上 '$'
DX,si&&&&&&&&&&&&
AH,9&&&&&&&&&&&&&&
21H&&&&&&&&&&&&&&&
MOV AH,4CH
CODES& ENDS
&&&我和同学交流之后发现,程序中mov byte ptr[si+bx],'$'可以改为mov [si+bx],'$'&
bh,0也可以去掉,这样就得出最简答案了。
DATAS SEGMENT
STR&& DB 'Please
input a string:$'
BUF&& DB 20
DB 20 DUP(24H)
CRLF& DB 0AH,0DH,'$'
& DATAS ENDS
STACKS SEGMENT
DB 200 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MOV AX,DATAS
LEA DX,STR
LEA DX,BUF
LEA DX,CRLF
LEA DX,BUF+2
MOV AH,4CH
CODES ENDS
现在已经真正理解DOS10号以及9号功能调用了,今天再次看这个题目又得到一个答案:
DATAS SEGMENT
STR&& DB 'Please
input a string:$'
BUF&& DB 20
DB 20 DUP(?)
CRLF& DB 0AH,0DH,'$'
& DATAS ENDS
STACKS SEGMENT
DB 200 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MOV AX,DATAS
LEA DX,STR
LEA DX,BUF
LEA DX,CRLF
MOV AL,BUF+1
MOV BUF[SI],24H
LEA DX,BUF+2
MOV AH,4CH
CODES ENDS
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。汇编语言(3)
1.输入字符串用10号中断,对缓冲区有格式规定,第一位未缓冲区大小,第二位保留,输入后储存字符串长度,从第三位开始是字符串。
2. 遍历字符串,按照A,Z,a,z的顺序依次CMP当前字符,按逻辑判断是不是非字母字符,如果是,转输出部分。
3.通过判断CX当前值,来判断该字符是不是第一个或最后一个字符,这两种情况输出要特别处理。
DATA SEGMENT
BUF DB 20,?,20 DUP(?)
CRLF DB 0AH,0DH,'$'
CODES SEGMENT
ASSUME CS:CODES,DS:DATA
MOV AX,DATA
MOV DX,OFFSET BUF
MOV AH,0AH
MOV DX,OFFSET CRLF
MOV AH,09H
MOV CL,BUF+1
LEA BX,BUF+2
A0: MOV AL,[BX]
CMP AL,'A'
CMP AL,'Z'
CMP AL,'a'
CMP AL,'z'
MOV AL,BUF+1
AND AX,00FFH
PRE:MOV DL,[BX-1]
MOV AH,02H
CUR:MOV DL,[BX]
MOV AH,02H
LAT:MOV DL,[BX+1]
MOV AH,02H
RTN:MOV DL,' '
MOV AH,02H
MOV AH,4CH
CODES ENDS
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:105438次
积分:3924
积分:3924
排名:第7227名
原创:293篇
转载:40篇
(1)(1)(2)(2)(12)(12)(3)(1)(1)(5)(22)(36)(4)(15)(21)(25)(20)(14)(10)(30)(22)(58)(12)(5)调用dos中断从键盘输入字符串然后显示输出的汇编程序_dos吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:13,599贴子:
调用dos中断从键盘输入字符串然后显示输出的汇编程序收藏
快试试吧,可以对自己使用挽尊卡咯~◆◆
调用dos中断从键盘输入字符串然后显示输出的汇编程序
龙膜PPF隐形车衣车漆透明膜什么价格?上海隐形车衣贴膜哪里好?
有点小难,汇编不太懂
判断数据奇偶性CODE&&&&& SEGMENT&&&&&&&&& ASSUME&&& CS: CODESTART:&&& MOV&&&&&& AH,&& 01H&&&&&&&&& ; 调用 DOS中断的1号子功能(键入一个字符), &&&&&&&&& INT&&&&&& 21H&&&&&&&&&&&&&& ; AL←键入一位数字&&&&&&&&& CMP&&&&&& AL,&& 30H&&&&&&& ; 若输入比‘0’小的字符则重新输入&&&&& JB&&&&&& START&&&&& CMP&&&&&& AL,&& 39H&&&&&&& ; 若输入比‘9’大的字符则重新输入&&&&& JA&&&&&& START&&&&&&& CLC&&&&&&&&&&&&&&&&&&&&&&& ; CF标志清0&&&&&&&&& SHR&&&&&& AL,&& 1&&&&&&&&&&& ; AL最低位移入CF&&&&&&&&& JNC&&&&&& EVN&&&&&&&&&&&&&& ; 根据CF的状态,判断输入数字的奇偶性&&&&&&&&& MOV&&&&&& BL,&& 31H&&&&&&&&& ; 奇数,BL←1的ASCII码&&&&&&&&& JMP&&&&&& DISPEVN:&&&&& MOV&&&&&& BL,&& 30H&&&&&&&&& ; 偶数,BL←0的ASCII码DISP:&&&& MOV&&&&&& AH,&& 02H&&&&&&&&& ; 调用DOS中断的2号子功能,输出字符&&&&&&&&& MOV&&&&&& DL,&& 0AH&&&&&&&&& ; 输出换行&&&&&&&&& INT&&&&&& 21H&&&&&&&&& MOV&&&&&& DL,&& 0DH&&&&&&&&& ; 输出回车&&&&&&&&& INT&&&&&& 21H&&&&&&&&& MOV&&&&&& DL,&& BL&&&&&&&&&& ; 输出标志字符&&&&&&&&& INT&&&&&& 21H&&&&& mov&&&&&& ah, 1&&&&& int&&&&&& 21h&&&&&&&&& MOV&&&&&& AH, 4CH&&&&&&&&&& ; 返回DOS&&&&&&&&& INT&&&&&& 21HCODE&&&&& ENDS&&&&&&&&& END&&&&&& START
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 搜狗手机输入法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信