汇编程序有几个小问题 希望好心人能帮我解答下谢谢
DATASSEGMENTstrdb20db0db20dup(?)str1db20dup(?)DATASENDSCODESSEGMENTASSUMECS:CODES,DS:...
DATAS SEGMENT
str db 20
db 0
db 20 dup (?)str1
db 20 dup (?)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
call input ;输入
xor cx, cx
mov cl, str + 1
lea si,str + 2
lea di,str1
call insert ;插入
mov dl,0dh ;回车换行
mov ah,2
int 21h
mov dl,0ah
int 21h
lea dx,str1
call output ;输出
MOV AH,4CH
INT 21H
input proc
lea dx, str
mov ah, 10
int 21h
ret
input endp
insert proc
i1:
cmp byte ptr [si], 'a'
jb i2
cmp byte ptr [si], 'z'
ja i2
sub byte ptr [si], 32
i2:
mov al,[si]
mov [di],al
inc di
mov byte ptr [di], 20h
inc si
inc di
loop i1
mov byte ptr [di], '$'
ret
insert endp
output proc
mov ah,9
int 21h
ret
output endp
CODES ENDS
END START
问题1: xor cx,cx 什么意思
问题2: MOV cl,str+1 程序里没有用到cl寄存器 问什么要把str+1 送给cl呢
问题3:str、和str1 分别用作哪里呢 str用于确定输入字符串中字符的位置 str1用于插入空格吗? 既然是要在转换后的字母后插入空格为什么要用两个寄存器 或者您直接说一下插入空格用的是什么原理可以吗
问题4: call insert ;插入
mov dl,0dh ;回车换行
mov ah,2
int 21h
mov dl,0ah 这段看不太懂
程序为
编程将键盘随即输入的字符串中小写字母转换为大写字母并在字母间插入空格后在屏幕输出。要求:键盘输入,空格插入,显示输出分别由子程序完成 展开
str db 20
db 0
db 20 dup (?)str1
db 20 dup (?)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
call input ;输入
xor cx, cx
mov cl, str + 1
lea si,str + 2
lea di,str1
call insert ;插入
mov dl,0dh ;回车换行
mov ah,2
int 21h
mov dl,0ah
int 21h
lea dx,str1
call output ;输出
MOV AH,4CH
INT 21H
input proc
lea dx, str
mov ah, 10
int 21h
ret
input endp
insert proc
i1:
cmp byte ptr [si], 'a'
jb i2
cmp byte ptr [si], 'z'
ja i2
sub byte ptr [si], 32
i2:
mov al,[si]
mov [di],al
inc di
mov byte ptr [di], 20h
inc si
inc di
loop i1
mov byte ptr [di], '$'
ret
insert endp
output proc
mov ah,9
int 21h
ret
output endp
CODES ENDS
END START
问题1: xor cx,cx 什么意思
问题2: MOV cl,str+1 程序里没有用到cl寄存器 问什么要把str+1 送给cl呢
问题3:str、和str1 分别用作哪里呢 str用于确定输入字符串中字符的位置 str1用于插入空格吗? 既然是要在转换后的字母后插入空格为什么要用两个寄存器 或者您直接说一下插入空格用的是什么原理可以吗
问题4: call insert ;插入
mov dl,0dh ;回车换行
mov ah,2
int 21h
mov dl,0ah 这段看不太懂
程序为
编程将键盘随即输入的字符串中小写字母转换为大写字母并在字母间插入空格后在屏幕输出。要求:键盘输入,空格插入,显示输出分别由子程序完成 展开
展开全部
问题1: xor cx,cx 什么意思
--是 MOV CX, 0 的另一个写法,高手常用。
问题2: MOV cl,str+1 程序里没有用到cl寄存器 问什么要把str+1 送给cl呢
--执行后 CL 中就是实际输入的字符数。
--后面,要用的吧。
问题3:str、和str1 分别用作哪里呢
str用于确定输入字符串中字符的位置
str1用于插入空格吗?
既然是要在转换后的字母后插入空格为什么要用两个寄存器
或者您直接说一下插入空格用的是什么原理可以吗
--具体算法,各人思路不同,
--看别人的程序,往往不好理解。
--你可以自己编一个试试看,也许会更简单。
问题4: call insert ;插入
mov dl,0dh ;回车换行
mov ah,2
int 21h
mov dl,0ah 这段看不太懂
--0DH,是回车符。
--0AH,是换行符。
--在屏幕上,起回车、换行的作用。
--是 MOV CX, 0 的另一个写法,高手常用。
问题2: MOV cl,str+1 程序里没有用到cl寄存器 问什么要把str+1 送给cl呢
--执行后 CL 中就是实际输入的字符数。
--后面,要用的吧。
问题3:str、和str1 分别用作哪里呢
str用于确定输入字符串中字符的位置
str1用于插入空格吗?
既然是要在转换后的字母后插入空格为什么要用两个寄存器
或者您直接说一下插入空格用的是什么原理可以吗
--具体算法,各人思路不同,
--看别人的程序,往往不好理解。
--你可以自己编一个试试看,也许会更简单。
问题4: call insert ;插入
mov dl,0dh ;回车换行
mov ah,2
int 21h
mov dl,0ah 这段看不太懂
--0DH,是回车符。
--0AH,是换行符。
--在屏幕上,起回车、换行的作用。
更多追问追答
追问
您在线到几点?请问 可能还有几个问题 真的特别感谢您解答了我的问题
追答
试试如下程序:
DATAS SEGMENT
X DB 13, 10, 81 DUP('$')
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX
LEA DI, X + 2
MOV CX, 40
LP:
CALL INPUT ;输入
CMP BYTE PTR [DI - 1], 0DH ;是回车吗
JZ PRINT
CALL INSERT ;插入
LOOP LP ;循环40遍
PRINT:
CALL OUTPUT ;输出
MOV AH, 4CH
INT 21H
;--------------
INPUT PROC
MOV AH, 1
INT 21H
CMP AL, 'a'
JB ZZZ
CMP AL, 'z'
JA ZZZ
SUB AL, 32
ZZZ:
MOV [DI], AL
INC DI
RET
INPUT ENDP
;--------------
INSERT PROC
MOV BYTE PTR [DI], ' '
INC DI
RET
INSERT ENDP
;--------------
OUTPUT PROC
LEA DX, X
MOV AH, 9
INT 21H
RET
OUTPUT ENDP
;--------------
CODES ENDS
END START
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询