汇编语言代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档