汇编语言考试四道编程题,在线等

编写一个子程序,将包含任意字符,以0结尾的字符串中转换成首字母大写,其余字母小写... 编写一个子程序,将包含任意字符,以0结尾的字符串中转换成首字母大写,其余字母小写 展开
 我来答
做而论道
高能答主

2015-07-19 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
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号调用,就把$排除在字符串之外。

白雲深處是我家
推荐于2016-10-29 · TA获得超过381个赞
知道小有建树答主
回答量:203
采纳率:66%
帮助的人:238万
展开全部
;不好意思,刚才没有使用函数方式实现。修改一下。
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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式