急~~用汇编语言编写出从键盘输入10个字符然后相反的顺序将字符输出
展开全部
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:输出一个字符
; 入口:dl=要显示的字符
Enter_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Enter_Chr endp
; -----------------------------------------
; 功能:输出回车换行
Enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Enter_CTLF endp
; -----------------------------------------
Prompt_Str db 'Please input a string: $' ;输入字符串提示信息
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
Output Prompt_Str ;提示输入字符串
lea dx,Buffer
mov ah,0ah ;从键盘接受一串字符
int 21h
CALL Enter_CTLF ;输出一个回车、换行
CALL Enter_CTLF ;输出一个回车、换行
cld
lea si,Buffer[1] ;实际输入的字符个数地址
mov cl,[si] ;读入实际输入的字符个数
test cl,0ffh
jz Exit_Proc ;直接回车,没有输入任何字符,结束程序,返回操作系统
xor ch,ch ;cx=实际输入的字符个数
add si,cx ;字符串尾部地址
std ;置方向标志,使变址寄存器自动减量
Disp_String:lodsb
mov dl,al
call Enter_Chr ;显示一个字符
loop Disp_String
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Buffer db 100,?
Code ENDS
END Start ;编译到此结束
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:输出一个字符
; 入口:dl=要显示的字符
Enter_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Enter_Chr endp
; -----------------------------------------
; 功能:输出回车换行
Enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Enter_CTLF endp
; -----------------------------------------
Prompt_Str db 'Please input a string: $' ;输入字符串提示信息
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
Output Prompt_Str ;提示输入字符串
lea dx,Buffer
mov ah,0ah ;从键盘接受一串字符
int 21h
CALL Enter_CTLF ;输出一个回车、换行
CALL Enter_CTLF ;输出一个回车、换行
cld
lea si,Buffer[1] ;实际输入的字符个数地址
mov cl,[si] ;读入实际输入的字符个数
test cl,0ffh
jz Exit_Proc ;直接回车,没有输入任何字符,结束程序,返回操作系统
xor ch,ch ;cx=实际输入的字符个数
add si,cx ;字符串尾部地址
std ;置方向标志,使变址寄存器自动减量
Disp_String:lodsb
mov dl,al
call Enter_Chr ;显示一个字符
loop Disp_String
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Buffer db 100,?
Code ENDS
END Start ;编译到此结束
展开全部
汤叔,是不是老师啊,怎么一直见你在线的,这么有空。
这个简单的程序似乎没有必要用子程序调用,里面有个cld,好像没有用啊。
我也写了个,当做是考试前复习0ah和09h功能的使用。
data segment
xx db 'Please input 10 characters: $'
x db 'The length of the string is no enough!!!!$'
xxx db 11,?,11 dup(?)
xxxx db 'The contrary sequence: $'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,xx
mov ah,09h
int 21h
lea dx,xxx
mov ah,0Ah
int 21h
mov ah,02h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
mov ah,09h
cmp xxx+1,10
jnz wrong
lea dx,xxxx
int 21h
mov ah,02h
mov cx,10
mov si,11
lp:
mov dl,xxx[si]
int 21h
dec si
loop lp
jmp exit
wrong:
lea dx,x
int 21h
exit:
mov ah,4ch
int 21h
code ends
end start
;这个只能输出10个字符。不多不少。
这个简单的程序似乎没有必要用子程序调用,里面有个cld,好像没有用啊。
我也写了个,当做是考试前复习0ah和09h功能的使用。
data segment
xx db 'Please input 10 characters: $'
x db 'The length of the string is no enough!!!!$'
xxx db 11,?,11 dup(?)
xxxx db 'The contrary sequence: $'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,xx
mov ah,09h
int 21h
lea dx,xxx
mov ah,0Ah
int 21h
mov ah,02h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
mov ah,09h
cmp xxx+1,10
jnz wrong
lea dx,xxxx
int 21h
mov ah,02h
mov cx,10
mov si,11
lp:
mov dl,xxx[si]
int 21h
dec si
loop lp
jmp exit
wrong:
lea dx,x
int 21h
exit:
mov ah,4ch
int 21h
code ends
end start
;这个只能输出10个字符。不多不少。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输出到哪?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询