小写字母变成大写字母的汇编程序
2009年9月29日 00:39
停课了,这是第二周,自己看着汇编
DSEG SEGMENT
STRING DB 'hello bird!',0DH,0AH,'$'
DSEG ENDS
STACK1 SEGMENT STACK
DB 256 DUP(?)
STACK1 ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG, SS:STACK1
START:
MOV AX,DSEG
MOV DS,AX
MOV BX,OFFSET STRING
MOV AX,0
MOV SI,AX
STR_L: CMP STRING[SI],'a'
JB NEXT
CMP STRING[SI],'z'
JA NEXT
SUB STRING[SI],20H
NEXT: INC SI
CMP STRING[SI],'$'
JNZ STR_L
MOV DX,OFFSET STRING ;这句可以用LEA DX,NOTE来替代,DX是数据通用寄存器
MOV AH,09H ;09H对应的是显示字符串
INT 21H
MOV AX, 4C00H
INT 21H
CSEG ENDS
END START
循环的那段本来按书上这么写的
MOV CX,11D
MOV AX,0
MOV SI,AX
STR_L: CMP STRING[SI],'a'
JB NEXT
CMP STRING[SI],'z'
JA NEXT
SUB STRING[SI],20H
NEXT: INC SI
LOOP STR_L
MOV AX,0
MOV SI,AX
STR_L: CMP STRING[SI],'a'
JB NEXT
CMP STRING[SI],'z'
JA NEXT
SUB STRING[SI],20H
NEXT: INC SI
LOOP STR_L
然后貌似还可以这样
MOV AX,0
MOV SI,AX
STR_L: .IF STRING[SI]>='a' && STRING[SI]<='z'
SUB STRING[SI],20H
.ENDIF
INC SI
CMP STRING[SI],'$'
JNZ STR_L
MOV SI,AX
STR_L: .IF STRING[SI]>='a' && STRING[SI]<='z'
SUB STRING[SI],20H
.ENDIF
INC SI
CMP STRING[SI],'$'
JNZ STR_L