code segment
assume cs:code
begin: mov ah,1
int 21h ;1号dos功能调用输入一个字符
xor al,20h ;——这里是最重要的一条语句,完成大小写互换
mov dl,al
mov ah,2
int 21h ;2号dos功能调用输出转换后的字符
mov ax,4c00h
int 21h
code ends
end begin
;汇编语言 从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
;以下是源程序
;用MASM50编译通过,运行结果如下:
;
;E:\masm1> 1125_3
;
;Please input : ABCD23$
;Total non_digital are: 004
;E:\masm1> 1125_3
;
;Please input : 1234$
;Total non_digital are: 000
;E:\masm1> 1125_3
;
;Please input : DFHGEFEHIEFIJIEJFI8797JHFJ$
;Total non_digital are: 022
;E:\masm1>
;
;程序如下:
data segment
s1 DB 0dh,0ah,'Please input : $'
s2 DB 0dh,0ah,'Total non_digital are: $'
num db 0
data ends
code segment
main proc far
assume cs:code
start:
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
lea dx,s1
mov ah,9
int 21h
NEXT:
MOV AH,01
INT 21H
CMP AL,'$'
JE DOWN
CMP AL,'0'
JB NO09
CMP AL,'9'
JA NO09
JMP NEXT
NO09:
INC NUM ;输入的是非数字,计数器加1
JMP NEXT
DOWN: ;输入'$',输出结果
lea dx,s2
mov ah,9
int 21h
MOV AL,NUM ;将计数器值以10进制输出
MOV AH,0
MOV DL,100
DIV DL
CALL DISP_P
mov al,ah
mov ah,0
MOV DL,10
DIV DL
CALL DISP_P
XCHG AH,AL
CALL DISP_P
ret
main endp
;============
DISP_P PROC NEAR
PUSH aX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
POP aX
RET
DISP_P ENDP
;=============
code ends
end start
data segment
rlt db 0,0,'$'
data ends
code segment
assume cs:code,ds:data
begin: mov ax,data
mov ds,ax
mov ah,1
int 21h ;输入第一个数
mov dl,al ;放dl暂存
and dl,0fh ;转换成数值
int 21h ;输入第二个数
and al,0fh ;转换为数值
add al,dl ;相加,和放在al中
xor ah,ah ;将和扩展为16位,放在ax中
mov dl,10
div dl ;和(ax)/10
or al,30h ;商转换为字符
mov rlt,al ;存到rlt中
or ah,30h ;余数转换为字符
mov rlt+1,ah ;存到rlt+1中
mov ah,9
lea dx,rlt
int 21h ;9号dos功能调用显示结果
mov ah,4ch
int 21h
code ends
end begin
程序执行时,输入的两个数之间不要加其他分隔符,比如3和4相加:
输入:34
在4后面显示07
以上就是关于求助:汇编源程序 从键盘输入一个英文字母,作大小写互换,然后显示出来。全部的内容,包括:求助:汇编源程序 从键盘输入一个英文字母,作大小写互换,然后显示出来。、汇编语言 从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。、求助:汇编源程序 从键盘输入2个个位数,相加,然后显示其结果。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)