汇编语言代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言编写从键盘输入一段字符串然后逆序输出DATA SEGMENT
DB 512 DUP('$') ;定义可输入的字符个数
BUF DB '$'
CRLF DB 0DH,0AH,24H ;回车换行符
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET BUF ;指针指向待显示字符串尾部AGAIN:
MOV AH,01 ;输入字符
INT 21H
CMP AL,0DH ;是回车吗
JE DISP ;是,转显示
DEC BX ;指针减1
MOV [BX],AL ;存入输入的字符
JMP AGAIN ;继续输入
DISP:
MOV AH,09 ;显示
MOV DX,OFFSET CRLF ;回车换行
INT 21H
MOV DX,BX ;定位待显示字符串首地址
MOV AH,09
INT 21H ;显示
MOV AH,4CH ;DOS返回
INT 21H
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 ;编译到此结束
从键盘输入一字符串(不超过255个字符)以相反顺序输出data segment
a d
b ? dup(?)
data ends
eseg segment
b db ? dup(?)
eseg ends
code segment
assume cs:code
start:mov ah,0ah
int 21h
mov bl,al
lea si,a
lea di,b
add di,n-1
mov cx,n
move:cld
lodsb
std
stosb
loop move
mov ah,4ch
int 21h
code ends
end start
解答:
data segment
;a db ? dup(?)
a d
b 255,0,255 dup(?)
data ends
eseg segment
;b db ? dup(?)
b db 255 dup(?)
eseg ends
code segment
;assume cs:code
assume cs:code,ds:data,es:eseg
start:
mov ax,data ;新增
mov ds,ax ;
mov ax,eseg ;
mov es,ax ;
mov dx,offset a ;学习0AH号DOS功能调用
mov ah,0ah