2 mloveau MloveAu 于 2016.04.27 12:34 提问

这是汇编的大小写转化问题

当输入要改变的字符串后,第一次输出的为正常,而第二次就不正常了

data segment

;定义字符串缓冲区
;MAXLEN 表示允许输入的最大字符数量
;ACTLEN 表示实际输入的数量
;STR 用于存储输入的字符串
;以下面为例,允许最大输入5个字符,如果STR后面的长度也定义为6,则实际输入的字符数量仅为5,
;因为最后一个字符会用于存储0Dh(回车符号)
;例如:输入"1234",然后回车,此时内存的情况为: 05 00 31 32 33 34 0D
;因此,为了满足实际的最大数量,通常将MAXLEN定义得比实际的多1个。
title1 db "please enter a command$"
title2 db 0AH,0DH,20H,20H,20H,,20H,20H,"1: G to S$"
title3 db 0AH,0DH,20H,20H,20H,,20H,20H,"2: S to G$"
title4 db 0AH,0DH,20H,20H,20H,,20H,20H,"else: quit$"
endl db 0AH,0DH,20H,20H,20H,,20H,20H,"$"

MAXLEN db 19
ACTLEN db 0
STR db 20 dup('')
;提示语句
PROMPT1 db 13,10,"Please input a string:$"
PROMPT2 db 13,10,"Your string is :$"

ends

2个回答

MloveAu
MloveAu   2016.04.27 12:35

data segment

;定义字符串缓冲区
;MAXLEN 表示允许输入的最大字符数量
;ACTLEN 表示实际输入的数量
;STR 用于存储输入的字符串
;以下面为例,允许最大输入5个字符,如果STR后面的长度也定义为6,则实际输入的字符数量仅为5,
;因为最后一个字符会用于存储0Dh(回车符号)
;例如:输入"1234",然后回车,此时内存的情况为: 05 00 31 32 33 34 0D
;因此,为了满足实际的最大数量,通常将MAXLEN定义得比实际的多1个。
title1 db "please enter a command$"
title2 db 0AH,0DH,20H,20H,20H,,20H,20H,"1: G to S$"
title3 db 0AH,0DH,20H,20H,20H,,20H,20H,"2: S to G$"
title4 db 0AH,0DH,20H,20H,20H,,20H,20H,"else: quit$"
endl db 0AH,0DH,20H,20H,20H,,20H,20H,"$"

MAXLEN db 19
ACTLEN db 0
STR db 20 dup('')
;提示语句
PROMPT1 db 13,10,"Please input a string:$"
PROMPT2 db 13,10,"Your string is :$"

ends
code segment
main proc far
;设置数据段寄存器
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
lea dx, title1
mov ah, 9
int 21h
lea dx, title2
mov ah, 9
int 21h
lea dx, title3
mov ah, 9
int 21h

lea dx, title4
mov ah, 9
int 21h

lea dx, endl
mov ah, 9
int 21h
mov ah,1
; wait for a command....
int 21h

and al,0fh
mov dh,al
cmp dh,1
jz GTOS
cmp dh,2
jz STOG
jnz exit
GTOS:
call reminder
mov si,0
repeat1:
add STR[si],20h
inc si
mov ax,si
cmp ax,bx
jz output
jmp repeat1
STOG:
call reminder
mov si,0
repeat2:
sub STR[si],20h
inc si
mov ax,si
cmp ax,bx
jz output
jmp repeat2

;--------------------------------------
;此处作转换,即将字符串改为大写或小写
;
;--------------------------------------
reminder proc
;提示输入,提示语句位于ds:dx处
lea dx,PROMPT1
mov ah, 9
int 21h

;调用AH=0ah的21H中断程序,获取输入的字符串
lea dx,MAXLEN
mov ah,0ah
int 21h

;取得实际输入的字符串数目
mov bl,ACTLEN
mov bh,0 
;将结尾处改为'$'以便调用AH=09H功能,即输出刚输入的字符串
mov STR[bx],'$' 
;输出结果的提示语句  
lea dx,PROMPT2
mov ah, 9
int 21h 
ret 

reminder endp

output:
;输出大小写转换后的字符串
lea dx,STR

mov ah, 9
int 21h
lea dx,endl
mov ah,9
int 21h

;返回继续输入
JMP start

exit:
;返回操作系统
mov ax, 4c00h
int 21h

code ends
end start ; set entry point and stop the assembler.

CSDNXIAOD
CSDNXIAOD   2016.04.27 15:03

字符大小写转化问题!
咳咳,这是个常识性问题!
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
汇编语言之大小写转换
欢迎关注博主的公众号:薛定谔的小鱼儿将datasg中的第一个字符转换为大写,第二个字符转换为小写assume cs:codesg,ds:datasgdatasg segment    db 'BsSIc'    db 'iNFOrMAtiOn'datasg endscodesg segment    start: mov ax,datasg              mov ds,ax      ...
汇编语言:实现大小写字母转换
问题介绍 编程,将datasg段中每个单词的前4个字母改为大写字母。用栈段存储临时数据。 代码展示 ;编程,将datasg段中每个单词的前4个字母改为大写字母 ;用栈来存储临时数据 assume cs:code,ds:datasg,ss:stack datasg segment db '1.display ' ;16个字节,将每个单词的前4个字母改为大写 db
利用汇编语言编程实现大小写字母转换
利用汇编语言编程实现,在已知以buf为首地址的字节存储区中,存放着一个以“$”为结束标志的字符串。编程在显示器上显示该字符串,并要求将小写字母以大写字母形式显示。data segment buf db 'Hello',13,10,'END$'data endsstack segment db 100 dup(0)stack endscode segmentassume cs:code,ds:dat
大小写转化代码大小写转化代码
大小写转化大小写转化大小写转化大小写转化大小写转化大小写转化大小写转化
8086汇编语言编程--大小写转换、统计个数、显示时还要求发音
上一篇博文是用C语言进行统计各字符个数的程序。真是简单的很。以前,做而论道还用汇编写过大小写转换的程序,也可以统计各字符的个数,还有发音的功能。因为没有被采纳,也就没有发表。现在写出来,和C语言的程序搭个伴。;----------------------程序要求:编写一段程序,能够将一段英文文章中的大写字母变成小写字母,小写字母变成大写字母;并统计出每个字母出现的次数,在屏幕中显示出来,每显示一个
大小写转化问题
怎么把 大写的A转化成小写的a?? ASCII码是有规律的。 A 01000001 转化成 16进制是41H  a 01100001 转化成 16进制是61H  相差 20H 而且还可以发现,第三位多了1,小写是1大写是0。 1.我们可以按位与(and) 进行转化,不管他是大写还是小写,直接设置第五位 0或者1,1为小写,(从右往左数第五位,高低位) assume cs:codesg,
汇编语言实验之文件内容大小写转换
本实验题目:将一个文件myprog.txt里面的内容中的大写字母全部转化为小写,且不能使用临时文件。题目实现思路:1、采用读和写的方式打开myprog.txt文件2、读取文件的数个内容放入缓冲区BUFF中3、将BUFF缓冲区中的内容全部转化为小写4、将指针移动到每一次读取文件的开始位置5、将BUFF缓冲区中的内容覆盖原位置的内容6、读取内容和覆盖内容以及大小写转化都可用循环实现7、关闭文件并退出源...
汇编 - 使用汇编实现字符串的大小写转换
使用汇编编程,可以直接访问内存中的数据,对数据进行相关操作,现在需要通过汇编指令and,or对字符串数据进行大小写转换。如下例,将BaSiC转换成大写,将iNforMaTiOn转换成小写。 例子: assume cs:codesg,ds:datasg datasg segment db 'BaSiC' db 'iNforMaTiOn' datasg ends codesg segmen
汇编语言实现小写转为大写
DATA SEGMENT     MES1    DB  'Input:',0AH,0DH,'$'     MES2    DB  0AH,0DH,'Output:',0AH,0DH,'$'     XXX     DB  10,?,10 DUP('$') DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV  A
java人民币大小写转化源代码
java人民币大小写转化源代码,实现了人民币的大小写转化。