汇编循环

来源:百度知道 编辑:UC知道 时间:2024/06/01 19:20:28
Stack segment
Dw 32DUP(?)
Stack Ends
Code Segment
Main Proc FAR
Assume CS:code,ss:Stack
mov AH,1
INT 21H
CMP AL,'A'
JB ERROR
CMP AL,'2'
JA ERROR
XOR AL,00100000B
MOV DL,AL
MOV AH,2
ZNT 21H
JMP EXIT
ERROR:
MOV DL,'1'
MOV AH,2
INT 21H
EXIT:
MOV AX,4C00H
INT 21H
MAIN EndP
Code Ends
End Main

如何循环5遍,即连续输入5个字符,大写改小写,其他是感叹号

Stack segment para stack
Dw 32 DUP(?)
Stack Ends
;增加了一个数据段,用来临时存放输入的字符
data segment
buf db 6,0, 6 dup(?)
data ends

Code Segment
Main Proc FAR
Assume CS:code,ss:Stack, ds:data
mov ax, data ;将数据段地址放入DS
mov ds, ax

mov ah, 0ah ;这一段的作用是连续输入字符,(0到5个)
lea dx, buf
int 21h
MOV AH,2 ;输出回车符
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h

lea si, buf+2 ;这一段的作用是将临时字符串中大写字母变成小写字母
mov cl, [buf+1] ;并将其他字母换成感叹号
cbw
@@:mov al, [si]
CMP AL,'A'
JB _ERROR
CMP AL,'Z'
JA _ERROR
XOR AL,00100000B
MOV [si],AL
jmp next
_ERROR:
MOV [si],'!'
next:
inc si
loop @b

mov [si], '$' ;输出转换后的字符串并退出
lea dx, buf+2
mov ah, 09h
int 21h
MOV AX,4C00H
INT 21H
MAIN EndP
Code Ends
End Main