初学者求解:怎么将程序改为通过键盘输入数据,结果在屏幕显示
菜鸟求解:如何将程序改为通过键盘输入数据,结果在屏幕显示Assembly codedatasegmentvarwdw 10101000010110
菜鸟求解:如何将程序改为通过键盘输入数据,结果在屏幕显示
Assembly codedata segmentvarw dw 1010100001011001bcont db ?data endsstack1 segment para stack dw 20h dup(0)stack1 endscode segment assume cs:code,ds:data,ss:stack1begin: mov ax,data mov ds,ax mov cl,0 mov ax,varwlop: test ax,0ffffh jz end0 jns shift inc clshift: shl ax,1 jmp lopend0: mov cont,cl mov ax,4c00h int 21hcode ends end begin
[解决办法]; E4-18.asm
; 写一个程序把从键盘上接收到的小写字母用大写字母显示出来,
; 其他字符原样显示。
; 按回车键结束程序。
;
;
assume cs:cseg
;
csegsegment
;
start: mov ah, 8
int 21h;不回显读取字符
cmp al, 'a'
jb show
cmp al, 'z'
ja show
and al, 11011111b
show:cmp al, 0dh
je return
mov dl, al
mov ah, 2
int 21h
jmp start
;
return:mov ax, 4c00h
int 21h
;
;子程序:
;功能:
;入参:
;出参:
;
xxproc near
ret
xxendp
;
csegends
;
end start
[解决办法]CODE SEGMENT
ASSUME CS:CODE
START: MOV CX,4
XOR BX,BX
AGAIN: MOV AH,1
INT 21H
CMP AL,'0'
JB AGAIN
CMP AL,'1'
JA AGAIN
SUB AL,30H
ADD BL,AL
SHL BL,1
LOOP AGAIN
SHR BL,1
NEXT: CALL DISP
MOV AH,4CH
INT 21H
DISP PROC NEAR
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
INT 21H
MOV DS,BX
MOV DL,BL
ADD DL,30H
CMP DL,'9'
JBE NEXT1
ADD DL,7
NEXT1: INT 21H
MOV AH,4CH
INT 21H
RET
DISP ENDP
CODE ENDS
END START