У меня есть эта проблема с кодом, который преобразует число в ASCII 'number-text'. Однако код, кажется, зацикливается на опционном коде 'div'8086 сборка
;Main Program
main:
mov ax, 0x0000
mov ds, ax ; setup data segment register
mov si, GreetString ; setup data segment offset
call print_string ; call print string procedure
mov si, DataWord ; setup data segment offset
mov bl, 0x000A ; base 10
call format_string ; call format string procedure
mov si, GreetString ; setup data segment offset
call print_string ; call print string procedure
prevent_overflow:
hlt ; halt the CPU
jmp prevent_overflow
format_string:
mov ax, [ds:si] ; load register ax with data
xor cx, cx ; set counter to 0
mov si, GreetString ; set pointer to address of GreetString
.format_char:
div bl ; divides by register bl
add ah, 48 ; convert to ascii numeric
mov [ds:si], ah ; move ascii numeric to ds:si
inc cx ; increase counter
inc si ; increase si
xor ah, ah ; clear ah register
or ax, ax
jnz .format_char ; jump to format next char
ret
Любая идея, почему это происходит? Я говорю «loop», потому что мой CPU находится на максимальном значении и не выполняет коды операций после div
* Обновлено. Спасибо, новый. Добавлен основной раздел, чтобы сделать его более читаемым (^. ^)
Какую ценность бл есть? Вы никогда не назначаете его явно. – newgre
да извините за это. я назначил его в основном разделе mov bl, 0x000A; base 10 call format_string; строка формата строки –