汇编语言程序设计题目,在线等答案!!!急!

5. 从键盘输入一个字母字符,将其统一为大写字母输出
好的程序要简单,运行速度快,你们的都太复杂

;用我的吧 编译正确通过
;-------------------------------------------

;********************************数据段
data segment
array db 0,0,0,0 ;数组开辟空间
string1 db "Please input the lower case: $" ;字符串以$结束
string2 db " Ok,the upper case is: $"
string3 db "What you inputed is not a lower case !Try again: $"
crlf db 13,10,13,10,"$" ;13回车,10换行
data ends
;**********************************
;**********************************代码段
code segment
assume ds:data,cs:code ;段对应关系的说明
main proc far ;far子程序调用时的参数

start:
push ds
sub ax,ax ;清零
push ax ;压栈

mov ax,data ;将数据传送如数据段
mov ds,ax
;---------------------------------------
;主程序开始
;---------------------------------------------------------
;显示"Please input the lower case:$"的内容
mov ah,09h
lea dx,string1
int 21h
;----------------------------------------------------------
;键盘输入字母
mov bx,offset array ;设定基址
input:
mov ah,01h
int 21h
cmp al,20h ;比对空格
je input
cmp al,61h ;al和'a'相比
jb next ;al值小于'a',显示提示继续输入
cmp al,7ah ;al值和'z'比较
jnb next ;大于'z', 显示提示继续输入
sub al,20h ;减去32即为对应的大写字母
mov bl,al ;用bl将值取走
;----------------------------------------------------------------
;换行
mov ah,09h
lea dx,crlf
int 21h
;---------------------------------------------------------
;显示"The upper case is:$"的内容
mov ah,09h
lea dx,string2
int 21h
;-----------------------------------------------------
;大写字母输出
mov dl,bl
mov ah,02h
int 21h
ret ;返回(return)
;----------------------------------------------------------------
;换行
next:
mov ah,09h
lea dx,crlf
int 21h
;---------------------------------------------------------
;显示"what you inputed is not a lower case !Try again:$"的内容
mov ah,09h
lea dx,string3
int 21h
jmp input
;-------------------------------------------------------------
main endp ;主函数结束
;********************************************
code ends ;代码段定义结束
end start ;这个程序段全部结束,程序段不但有代码段还有其他段
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-12-01
从键盘输入一串任意字符,将其中的字母统一为大写输出。
程序如下:
DATA SEGMENT
MSG1 DB 13, 10, 'Please input a STR : $'
MSG2 DB 13, 10, 'The STR in Upper is: $'
I1_L DB 100
I1_N DB ?
I1_B DB 100 DUP (?)
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX

LEA DX, MSG1
MOV AH, 9
INT 21H

LEA DX, I1_L
MOV AH, 10
INT 21H

LEA BX, I1_B
MOV CL, I1_N
MOV CH, 0
LOP:
MOV AL, [BX]
CMP AL, 13
JE DISP

CMP AL, 'a'
JB NEXT
CMP AL, 'z'
JA NEXT
TO_UPPER:
AND AL, 11011111B
MOV [BX], AL

NEXT:
INC BX
LOOP LOP
JMP NEXT

DISP:
MOV BYTE PTR [BX], '$'
LEA DX, MSG2
MOV AH, 9
INT 21H

LEA DX, I1_B
MOV AH, 9
INT 21H

MOV AH, 4CH
INT 21H

CODE ENDS

END START

程序运行后,将以下列形式显示:

C:\MASM>z

Please input a STR : dkfmdoiw9092132KMSADLFdsdl;sd
The STR in Upper is: DKFMDOIW9092132KMSADLFDSDL;SD本回答被提问者采纳
第2个回答  2011-12-02
MOV AH,1
INT 21H
CMP AL,'a'
JB L1
CMP al,'z'+1
JNB L1
AND AL,5FH
L1:
MOV DL,AL
MOV AH,2
INT 21H
第3个回答  2011-12-02
#include<stdio.h>
main()
{
char a[100];
char *p=a;
scanf("%s",a);
while(*p!='\0')
{
if(*p>='a' && *p<='z') *p=*p-32;
printf("%c",*p);
p++;追问

你这是c语言写的 我要求的是汇编语言写

追答

DATA SEGMENT
string DB 'ddfs#@%#@%gfdggAFSADFsgdgsddsgdfg!$'
count DW $-string
diff DB 'a'-'A'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX

MOV CX,count
LEA SI,string
LEA DI,string

NEXTC:
MOV AL,[SI]
CMP al,'a'
jnae SKIP
CMP al,'z'
ja SKIP

sub al,'a'-'A'
SKIP:
stosb
INC SI
LOOP NEXTC

MOV AH,09H
MOV DX,OFFSET string
INT 21H

MOV AH,0
INT 16H

MOV AX,4C00H
INT 21H

CODE ENDS
END START

追问

没看明白,前面的乱码是什么?而且从键盘输入指令也没看到你写啊 这是一个字符串 所以应该是
MOV AH ,OAH啊

第4个回答  2011-12-02
编制程序完成 12h,45h,0F3h,6Ah,20h,0FEh,90h,0C8h,57h 和34h等10DATAS SEGMENT bdata db 01h,02h,03h,04h,05h,06h,07h,08h,09h,
相似回答