汇编语言的字符输入/输出程序设计
1.实验要求:(1)本实验要求从键盘上键入10个字符,然后以与键入字符先后相反的顺序将字符显示出来。求汇编语言的代码,拜托不要从网上搜,我都看过了。。。。。。。。最好解释...
1. 实验要求:
(1) 本实验要求从键盘上键入10个字符,然后以与键入字符先后相反的顺序将字符显示出来。
求汇编语言的代码,拜托不要从网上搜,我都看过了。。。。。。。。
最好解释一下
是很新鲜,但和课件上的一模一样。 展开
(1) 本实验要求从键盘上键入10个字符,然后以与键入字符先后相反的顺序将字符显示出来。
求汇编语言的代码,拜托不要从网上搜,我都看过了。。。。。。。。
最好解释一下
是很新鲜,但和课件上的一模一样。 展开
展开全部
;呵呵,如此高分,也来凑热闹。
;运行示范如下
;C:\R
;HXGSFHSDG736RU3GRH32867VF847TBF47EHF78CGY4RCY4M8CEW7YDNRG
;GRNDY7WEC8M4YCR4YGC87FHE74FBT748FV76823HRG3UR637GDSHFSGXH
;C:\
;用MASM5.0编译通过
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
;运行示范如下
;C:\R
;HXGSFHSDG736RU3GRH32867VF847TBF47EHF78CGY4RCY4M8CEW7YDNRG
;GRNDY7WEC8M4YCR4YGC87FHE74FBT748FV76823HRG3UR637GDSHFSGXH
;C:\
;用MASM5.0编译通过
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
展开全部
;测试过了 一下程序可以,有什么问题可以问我 此刻在线
assume cs:code,ds:data
data segment
buff db 11 ;缓存空间大小
db ? ;输入字符数,电脑自动填入
db 11 dup(?) ;存放键盘输入字符的空间
sort db 10 dup(?),'$' ;开辟一段空间,放逆转的字符
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dx,0
mov ah,0ah
int 21h
mov cx,10 ;10个字符,故要10次循环
mov si,11 ;最后一个字符的偏移地址
mov di,13 ;放逆转字符空间开始偏移地址,这里要注意,因为输入字符回车会占一个字符所以不是12而是13
;这个循环是把输入的字符逆转放到sort空间
s:
mov ah,ds:[si]
mov ds:[di],ah
dec si
inc di
loop s
mov dx,offset sort ;显示字符功能
mov ah,09
int 21h
mov ax,4c00h
int 21h
code ends
end start
应你的要求 修改了下程序 输入任意多个字符都可以
assume cs:code,ds:data
data segment
buff db 100 ;缓存空间大小
db ? ;输入字符数,电脑自动填入
db 100 dup(?) ;存放键盘输入字符的空间
sort db 100 dup(?) ;开辟一段空间,放逆转的字符
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dx,0
mov ah,0ah
int 21h
mov ch,0
mov cl,ds:[1] ;获取你输入的字符数
mov si,cx
add si,1 ;最后一个字符的偏移地址
mov di,offset sort ;放逆转字符空间开始偏移地址
;这个循环是把输入的字符逆转放到sort空间
s:
mov ah,ds:[si]
mov ds:[di],ah
dec si
inc di
loop s
mov byte ptr ds:[di],'$'
mov dx,offset sort ;显示字符功能
mov ah,09
int 21h
mov ax,4c00h
int 21h
code ends
end start
assume cs:code,ds:data
data segment
buff db 11 ;缓存空间大小
db ? ;输入字符数,电脑自动填入
db 11 dup(?) ;存放键盘输入字符的空间
sort db 10 dup(?),'$' ;开辟一段空间,放逆转的字符
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dx,0
mov ah,0ah
int 21h
mov cx,10 ;10个字符,故要10次循环
mov si,11 ;最后一个字符的偏移地址
mov di,13 ;放逆转字符空间开始偏移地址,这里要注意,因为输入字符回车会占一个字符所以不是12而是13
;这个循环是把输入的字符逆转放到sort空间
s:
mov ah,ds:[si]
mov ds:[di],ah
dec si
inc di
loop s
mov dx,offset sort ;显示字符功能
mov ah,09
int 21h
mov ax,4c00h
int 21h
code ends
end start
应你的要求 修改了下程序 输入任意多个字符都可以
assume cs:code,ds:data
data segment
buff db 100 ;缓存空间大小
db ? ;输入字符数,电脑自动填入
db 100 dup(?) ;存放键盘输入字符的空间
sort db 100 dup(?) ;开辟一段空间,放逆转的字符
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dx,0
mov ah,0ah
int 21h
mov ch,0
mov cl,ds:[1] ;获取你输入的字符数
mov si,cx
add si,1 ;最后一个字符的偏移地址
mov di,offset sort ;放逆转字符空间开始偏移地址
;这个循环是把输入的字符逆转放到sort空间
s:
mov ah,ds:[si]
mov ds:[di],ah
dec si
inc di
loop s
mov byte ptr ds:[di],'$'
mov dx,offset sort ;显示字符功能
mov ah,09
int 21h
mov ax,4c00h
int 21h
code ends
end start
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
任意输入一个字符串,将该串倒序后在屏幕上显示
DATA SEGMENT
BUF1 DB 20
DB ?
DB 20 DUP(?)
BUF3 DB 13,10
BUF2 DB 20 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,ES:DATA,DS:DATA
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV ES,AX
CALL INPUT
CALL COUNT /调用子函数
CALL REVERT
CALL OUTPUT
MOV AX,4C00H
INT 21H
MAIN ENDP
INPUT PROC
MOV DX,OFFSET BUF1
MOV AH,0AH
INT 21H
RET
INPUT ENDP /输入字符串
COUNT PROC
MOV CX,0FFFFH
LEA SI,BUF1+2
AGAIN: CMP BYTE PTR [SI],0DH
JZ TO
INC SI
LOOP AGAIN
TO: NOT CX
RET
COUNT ENDP /判断是否输入完,enter表示输入结束,输入完则对cx取非,所得的值是输入字符的个数/
REVERT PROC
DEC CX
LEA SI,BUF1+2
ADD SI,CX /使si指向输入字符串的最后一个字符的地址
LEA DI,BUF2
INC CX
AGAIN1:STD /方向标志设为1,减量修改地址
LODSB /将位于ds段有si所指的存储单元放入al中
CLD /方向标志设为0,增量修改地址
STOSB /将al中的数据存到es段由di寄存器所指的内存单元
LOOP AGAIN1
MOV BYTE PTR [DI],'$'
RET
REVERT ENDP
OUTPUT PROC
LEA DX,BUF3
MOV AH,9
INT 21H
RET
OUTPUT ENDP /输出倒序后的字符串
CODE ENDS
END MAIN
DATA SEGMENT
BUF1 DB 20
DB ?
DB 20 DUP(?)
BUF3 DB 13,10
BUF2 DB 20 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,ES:DATA,DS:DATA
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV ES,AX
CALL INPUT
CALL COUNT /调用子函数
CALL REVERT
CALL OUTPUT
MOV AX,4C00H
INT 21H
MAIN ENDP
INPUT PROC
MOV DX,OFFSET BUF1
MOV AH,0AH
INT 21H
RET
INPUT ENDP /输入字符串
COUNT PROC
MOV CX,0FFFFH
LEA SI,BUF1+2
AGAIN: CMP BYTE PTR [SI],0DH
JZ TO
INC SI
LOOP AGAIN
TO: NOT CX
RET
COUNT ENDP /判断是否输入完,enter表示输入结束,输入完则对cx取非,所得的值是输入字符的个数/
REVERT PROC
DEC CX
LEA SI,BUF1+2
ADD SI,CX /使si指向输入字符串的最后一个字符的地址
LEA DI,BUF2
INC CX
AGAIN1:STD /方向标志设为1,减量修改地址
LODSB /将位于ds段有si所指的存储单元放入al中
CLD /方向标志设为0,增量修改地址
STOSB /将al中的数据存到es段由di寄存器所指的内存单元
LOOP AGAIN1
MOV BYTE PTR [DI],'$'
RET
REVERT ENDP
OUTPUT PROC
LEA DX,BUF3
MOV AH,9
INT 21H
RET
OUTPUT ENDP /输出倒序后的字符串
CODE ENDS
END MAIN
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你自己看下。。
DATA SEGMENT
INFO1 DB 0DH,0AH,‘INPUT STRING:$’
INFO2 DB 0DH,0AH,‘OUTPUT STRING:$’
BUFA DB 81
DB ?
DB 81 DUP(0)
BUFB DB 81 DUP(0)
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
LEA DX,INFO1
MOV AH,9 ;9号调用,显示输入提示信息
INT 21H
LEA DX,BUFA
MOV AH,10 ;10号调用,键盘输入字符串到缓冲区BUFA
INT 21H
LEA SI,BUFA+1 BUFA+1中存放的是输入字符的长度
MOV CH,0 ; 取字符长度→CX
MOV CL,[SI]
ADD SI,CX ;SI 指向字符串尾部
LEA DI,BUFB ;DI指向字符串变量BUFB
NEXT: MOV AL,[SI]
MOV [DI],AL
DEC SI 将BUFA中字符反向存入BUFB中
INC DI
LOOP NEXT
MOV BYTE PTR [DI],‘$’;BUFB中加入字符串结束符’$’
LEA DX,INFO2
MOV AH,9 ;9号调用,显示输出提示信息
INT 21H
LEA DX,BUFB
MOV AH,9 ;反向显示字符串
INT 21H
MOV AH,4CH
INT 21H
DATA SEGMENT
INFO1 DB 0DH,0AH,‘INPUT STRING:$’
INFO2 DB 0DH,0AH,‘OUTPUT STRING:$’
BUFA DB 81
DB ?
DB 81 DUP(0)
BUFB DB 81 DUP(0)
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
LEA DX,INFO1
MOV AH,9 ;9号调用,显示输入提示信息
INT 21H
LEA DX,BUFA
MOV AH,10 ;10号调用,键盘输入字符串到缓冲区BUFA
INT 21H
LEA SI,BUFA+1 BUFA+1中存放的是输入字符的长度
MOV CH,0 ; 取字符长度→CX
MOV CL,[SI]
ADD SI,CX ;SI 指向字符串尾部
LEA DI,BUFB ;DI指向字符串变量BUFB
NEXT: MOV AL,[SI]
MOV [DI],AL
DEC SI 将BUFA中字符反向存入BUFB中
INC DI
LOOP NEXT
MOV BYTE PTR [DI],‘$’;BUFB中加入字符串结束符’$’
LEA DX,INFO2
MOV AH,9 ;9号调用,显示输出提示信息
INT 21H
LEA DX,BUFB
MOV AH,9 ;反向显示字符串
INT 21H
MOV AH,4CH
INT 21H
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DATA SEGMENT
BUF DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DS,AX
MOV CX,10
MOV SI,OFFSET BUF
READ: MOV AH,01H
INT 21H
MOV [SI],AL
INC SI
LOOP READ
MOV CX,10
DISP: MOV DL,[SI]
MOV AH,02H
INT 21H
DEC SI
LOOP DISP
MOV AH ,4CH
INT 21H
CODE ENDS
END START
新鲜打出来的
BUF DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DS,AX
MOV CX,10
MOV SI,OFFSET BUF
READ: MOV AH,01H
INT 21H
MOV [SI],AL
INC SI
LOOP READ
MOV CX,10
DISP: MOV DL,[SI]
MOV AH,02H
INT 21H
DEC SI
LOOP DISP
MOV AH ,4CH
INT 21H
CODE ENDS
END START
新鲜打出来的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询