当前位置: 代码迷 >> 汇编语言 >> 初学者求解:怎么将程序改为通过键盘输入数据,结果在屏幕显示
  详细解决方案

初学者求解:怎么将程序改为通过键盘输入数据,结果在屏幕显示

热度:1592   发布时间:2013-02-26 00:00:00.0
菜鸟求解:如何将程序改为通过键盘输入数据,结果在屏幕显示
Assembly code
data   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
;
cseg segment
;
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
;
;子程序:
;功能:
;入参:
;出参:
;
xx proc near
ret
xx endp
;
cseg ends
;
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