0
다음 작업을 수행하여 숫자 문자열 (<=100
)을 nr becomes 1 if it's less tham 60 and 2 if not
으로 변경합니다. 나는이 코드를 가지고 나왔다. 나는 가장 큰 도전은 숫자를 인쇄 할 줄 알았는데 ...하지만 그것은 코드에 표시된이 오류가 지적 저를 제공합니다x86 인수의 크기가 잘못되었습니다. [tasm]
Prints macro number
mov bx, 10 ; need to divide by 10 to get the last digit
mov al, number
mov ah,0
mov cx,0
decompose:
inc cx
div bx ; reminder stored in ah
mov dl,ah
add dl,48 ; to convert to char ; <<<<< HERE
push dl
cmp al,0 ;the nr=0 means that the loop ends
jnz decompose
printloop: ;loops for as many times as counted in cx ; <<<< HERE
pop dl
mov ah,2h ; prints whatever is in dl
int 21h
loop printloop
mov dl,' ' ; the space after a number
mov ah,2h
int 21h
endm
data segment para public 'data'
sir DB 15, 78, 12, 39, 42, 88
lungime_sir EQU $-sir
data ends
;stack segment para public 'stack'
; dw stack_size dup(?)
; stack_start label word
;stack ends
code segment para public 'code'
start proc far
assume cs:code, ds:data
push ds
xor ax,ax
push ax
mov ax, data
mov ds, ax
mov si,0
mov cx,lungime_sir
next:
cmp sir[si],60
jb mic
mov sir[si],2
inc si
loop next
mic:
mov sir[si],1
inc si
cmp si,lungime_sir
jle next
mov cx,lungime_sir
mov si,0
;put values on a stack and pop them out
print:
Prints sir[si]
inc si
loop print
ret
start endp
code ends
end start
문제점은 무엇입니까? :(push dx
및 pop dx
에
감사합니다. 이제 알고리즘에 분명히 다른 문제가 있습니다. "32"는 "2000781 ..... 152"를 인쇄 중입니다 :/ –
그냥 내 대답을 업데이트했습니다 –
오 이런. 감사! –