Mahmoud.Afrad
یک شنبه 14 آذر 1389, 07:01 صبح
کد زیر می بایست با فشردن کلید alt
5واحد به عدد b اضافه کند و در صورتی که کلید فشرده شده ctrl باشد 10 واحد از عدد کم کند و هر بار عدد را نمایش دهد ، اما خروجی تغییرات درستی ندارد.
برای نمایش عدد b (حداکثر سه رقمی)آنرا با تقسیمهای متوالی بر 10 به ارقام تشکیل دهنده تبدیل و آنها را پشت سر هم نمایش دادیم.
;
stack segment stack ; define stack
dw 200h dup(?)
stack ends
data segment ; define var
sec1 db ?
sec5 db ?
sec10 db ?
cout db ?
B db 50
b0 db ?
b1 db ?
b2 db ?
temp db ?
data ends
code segment
assume cs:code , ds:data , ss:stack
start:
mov ax,seg data
mov ds,ax
L1: mov BL,10 ;divide number to digits ( b= b2b1b0 )
mov ah,0
mov al,b
div BL
mov b0,ah
mov ah,0
div BL
mov b1,ah
mov ah,0
div BL
mov b2,ah
mov ah,02h ;Set cursor position
mov dh,12
mov dl,39
int 10h
mov ah,02 ;Display output
add b2,48
mov dl,b2
int 21h
add b1,48
mov dl,b1
int 21h
add b0,48
mov dl,b0
int 21h
L2: mov al,0
mov ah,12h ;Get enhanced shift flags
int 16h
mov temp,al
and al,8h ;If press alt +5
cmp al,8h
jnz h2
add b,5
jmp L1
h2: mov al,temp ;If press ctrl -10
and al,4h
cmp al,4h
jnz L2
sub b,10
jmp L1
mov al,0
mov ah,4ch
int 21h
code ends
end start
end start
5واحد به عدد b اضافه کند و در صورتی که کلید فشرده شده ctrl باشد 10 واحد از عدد کم کند و هر بار عدد را نمایش دهد ، اما خروجی تغییرات درستی ندارد.
برای نمایش عدد b (حداکثر سه رقمی)آنرا با تقسیمهای متوالی بر 10 به ارقام تشکیل دهنده تبدیل و آنها را پشت سر هم نمایش دادیم.
;
stack segment stack ; define stack
dw 200h dup(?)
stack ends
data segment ; define var
sec1 db ?
sec5 db ?
sec10 db ?
cout db ?
B db 50
b0 db ?
b1 db ?
b2 db ?
temp db ?
data ends
code segment
assume cs:code , ds:data , ss:stack
start:
mov ax,seg data
mov ds,ax
L1: mov BL,10 ;divide number to digits ( b= b2b1b0 )
mov ah,0
mov al,b
div BL
mov b0,ah
mov ah,0
div BL
mov b1,ah
mov ah,0
div BL
mov b2,ah
mov ah,02h ;Set cursor position
mov dh,12
mov dl,39
int 10h
mov ah,02 ;Display output
add b2,48
mov dl,b2
int 21h
add b1,48
mov dl,b1
int 21h
add b0,48
mov dl,b0
int 21h
L2: mov al,0
mov ah,12h ;Get enhanced shift flags
int 16h
mov temp,al
and al,8h ;If press alt +5
cmp al,8h
jnz h2
add b,5
jmp L1
h2: mov al,temp ;If press ctrl -10
and al,4h
cmp al,4h
jnz L2
sub b,10
jmp L1
mov al,0
mov ah,4ch
int 21h
code ends
end start
end start