Вывести на экран целое число - Assembler

Узнай цену своей работы

Формулировка задачи:

Собственно вот программа которая должна вывести на консоль число -23567, но в итоге она ничего не выводит, а Turbo Debugger показывает какую то ахинею
dseg segment para public 'data'
num dw -23567
dseg ends
 
stseg segment stack 'stack'
db 64 dup("stack")
stseg ends
 
code segment para public 'code'
assume ds:dseg, ss:stseg, cs:code
digit proc far
 mov bx, num
 or bx, bx
 jns m1 
 mov al, '-'
 int 29h
 neg bx
 m1:
  mov ax, bx
  xor cx, cx 
  mov bx, 10
 
 m2:
  xor dx, dx
  div bx
  add dl, '0'
  push dx
  inc cx
  test ax, ax
  jnz m2 
 
 m3:
  pop ax
  int 29h
  loop m3 
  ret
digit endp
code ends
end digit
Или что то не так в коде? п.с. использую TASM 2.5

Решение задачи: «Вывести на экран целое число»

textual
Листинг программы
.model tiny
.code
org 100h
main proc
     mov  si,offset num
     mov  di,offset rez
     mov  byte ptr [di],'-'
     mov  word ptr ax,[si]
     neg  ax
     mov  cx,10
     call hex_dec
     mov  ah,09h
     mov  dx,offset rez
     int  21h
     mov  ah,10h
     int  16h
     ret
     
hex_dec  proc
m1:
     xor  dx,dx
     div  cx
     or   ax,ax
     jz   done
     push dx
     call m1
     pop  dx
done:
     add  dl,30h
     mov  [di+1],dl
     inc  di     
     ret
hex_dec  endp    
num  dw -23567
rez  db 6 dup (?),'$'
main endp
end  main

Объяснение кода листинга программы

  1. .model tiny - устанавливает модель памяти для программы (в данном случае, модель tiny)
  2. .code - указывает на то, что следующий текст является кодом
  3. org 100h - определяет точку входа в программу (в данном случае, адрес 100h)
  4. main proc - определяет процедуру main, в которой будет выполняться основная логика программы
  5. mov si,offset num - перемещает регистр si на адрес переменной num, чтобы получить доступ к ее значению
  6. mov di,offset rez - перемещает регистр di на адрес переменной rez, чтобы получить доступ к ее значению
  7. mov byte ptr [di],'-' - записывает символ '-' в байтовый массив rez
  8. mov word ptr ax,[si] - перемещает слово из переменной num в регистр ax
  9. neg ax - инвертирует значение регистра ax
  10. mov cx,10 - устанавливает значение регистра cx равным 10
  11. call hex_dec - вызывает процедуру hex_dec
  12. mov ah,09h - устанавливает значение регистра ah равным 9
  13. mov dx,offset rez - перемещает регистр dx на адрес переменной rez, чтобы получить доступ к ее значению
  14. int 21h - выполняет интерполяцию 21h, используя значения регистров ax и dx
  15. mov ah,10h - устанавливает значение регистра ah равным 10
  16. int 16h - выполняет интерполяцию 16h, используя значения регистров ax и dx
  17. ret - завершает выполнение процедуры main и возвращает управление операционной системе
  18. hex_dec proc - определяет процедуру hex_dec
  19. m1: - определяет внутреннюю процедуру m1 внутри hex_dec
  20. xor dx,dx - устанавливает регистр dx равным 0
  21. div cx - делит значение регистра cx на значение регистра dx
  22. or ax,ax - логически умножает значение регистра ax на себя
  23. jz done - если результат равен нулю, то переходит к процедуре done
  24. push dx - сохраняет значение регистра dx в стеке
  25. call m1 - вызывает процедуру m1
  26. pop dx - восстанавливает значение регистра dx из стека
  27. done: - определяет процедуру done внутри hex_dec
  28. add dl,30h - добавляет значение 30h к значению регистра dl
  29. mov [di+1],dl - записывает значение регистра dl в байтовый массив rez с смещением 1
  30. inc di - увеличивает значение регистра di на 1
  31. ret - завершает выполнение процедуры hex_dec и возвращает управление операционной системе
  32. num dw -23567 - определяет переменную num со значением -23567
  33. rez db 6 dup (?),'$' - определяет переменную rez как байтовый массив с шестью повторяющимися символами '?' и значением '$'
  34. main endp - завершает определение процедуры main
  35. end main - завершает программу

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы