汇编语言考试四道编程题,在线等
展开全部
DATA SEGMENT
STR DB '!@#$%?><qwertASDFG ZXCVB(*$1235790Kf', 0
;这是一个包含任意字符,以0结尾的字符串
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
;---------------------------------
DISP:
MOV AH, 2
D_LP:
MOV DL, [SI]
CMP DL, 0
JZ D_END
INT 21H
INC SI
JMP D_LP
D_END:
MOV DL, 13
INT 21H
MOV DL, 10
INT 21H
RET
;---------------------------------
PROG:
;把以0结尾的字符串中转换成"首字母大写,其余字母小写"
DEC SI
FIR:
INC SI
MOV AL, [SI]
CMP AL, 0
JZ P_END
AND AL, 11011111B
CMP AL, 'A'
JB FIR
CMP AL, 'Z'
JA FIR
MOV [SI], AL
SEC:
INC SI
MOV AL, [SI]
CMP AL, 0
JZ P_END
OR AL, 20H
CMP AL, 'a'
JB SEC
CMP AL, 'z'
JA SEC
MOV [SI], AL
JMP SEC
P_END:
RET
;---------------------------------
START:
MOV AX, DATA
MOV DS, AX
LEA SI, STR ;取偏移地址
CALL DISP ;显示原字符串
LEA SI, STR ;取偏移地址
CALL PROG ;字符串转换
LEA SI, STR ;取偏移地址
CALL DISP ;显示处理后字符串
MOV AX, 4C00H
INT 21H
;------------------------------------
CODE ENDS
END START
;====================================
上述程序才符合题目要求。
执行后显示:
c:\masm5>mm
!@#$%?><qwertASDFG ZXCVB(*$1235790Kf
!@#$%?><Qwertasdfg zxcvb(*$1235790kf
网友采纳答案中,对《包含任意字符,以0结尾》的理解,有偏差。
在任意字符中,就包括《$》。
因此,不能为了使用以$为结束符的9号调用,就把$排除在字符串之外。
展开全部
;不好意思,刚才没有使用函数方式实现。修改一下。
data segment
str db 'this Is A Test String, Including DIGITAL ALPHABET(0-9).',0,'$'
data ends
stack segment
dw 128 dup(0)
ends
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
lea si,str
call func
lea dx, str
mov ah,9
int 21h
mov ax, 4c00h
int 21h
;si the address of the string
func proc near
mov bx,0
mov al,[si+bx] ;we think the first alphabet must be a Alphabet.
xor al,20H ;so convert it to upper case
mov str[si+bx],al
L1:
inc bx
mov al,[si+bx]
cmp al,0
jz str_end
L3: ;'A'-'Z'
cmp al,'A'
jb L4
cmp al,'Z'
ja L4
or al,60H ; to lower case
mov [si+bx],al
L4: ;not 'a'-'z' and not 'A'-'Z'
jmp L1
str_end:
ret
func endp
code ends
end start
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询