Advertisement
stbrr

output result in dec n in hex

Oct 20th, 2021 (edited)
2,015
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. assume CS:code, DS:data
  2.  
  3. data segment
  4. a dw 5
  5. b dw 7
  6. c dw 3
  7. d dw 4
  8. ;для доп лабы
  9. res dw ?       
  10. msg db 2 dup(30h), 0dh, 0ah, "$"    ;0dh -возврат каретки,0ah - подача след строки
  11. msg2 db 2 dup(30h), "$"
  12. data ends
  13.  
  14. sseg segment stack
  15. db 100h dup (?)
  16. sseg ends
  17.  
  18. code segment
  19. start:      
  20. ;(a+b)/c + d + 3
  21. ;(5+7)/3 + 4 + 3 = 11 (0B)
  22. mov AX, data
  23. mov DS, AX      ;указывает на data сегмент
  24. mov AX, a       ;AX = 5
  25. add AX, b       ;AX = 5 + 7 |12 = 0C
  26. cwd             ;слово в двойное слово
  27. div c           ;AX = 12/3 |4
  28. add AX, d       ;AX = 4+4 |8
  29. add AX, 3       ;AX = 8+3 |11 =0B
  30. mov res, AX ;сохраним результат в переменную
  31.  
  32. ; --Вывод десятичного числа--
  33. mov DI, offset msg      ; DI  - destination index указывает на начало строки
  34. push DI             ; сохраняю DI в стек
  35.  
  36. mov BX, 10          ; основание системы счисления
  37. xor CX, CX          ; обнуление счетчика цифр
  38. inDec:  
  39.     xor DX, DX      ; обнуляем dx
  40.     div BX          ; делим число на основание сс. В остатке - последняя цифра. ax - частное, dx - остаток
  41.     add DL, 30h         ; в dl будет находится код символа цифры, и чтобы получить в al именно код символа, нужно прибавить код символа "0", который равен 30h
  42.     push DX         ; сохраним цифру из остатка в стек
  43.     inc CX         
  44.     or AX, AX       ; проверка ax == 0
  45.     jne inDec       ; переход по адресу inDec, если частное не ноль  (продолжаем до конца числа)
  46.  
  47. makeStr:
  48.     pop AX          ; извлекаем цифру
  49.     mov [DI], AL        ; перемещаем цифру в строку (по адресу из DI)
  50.     inc DI             
  51.     dec CX             
  52.     or CX, CX
  53.     jne makeStr
  54.  
  55. mov AH, 09h         ; 09h - вывод всех символов строки (она хранится в DX) до символа "$"
  56. pop DI              ; получили адрес начала строки
  57. mov DX, DI         
  58. int 21h
  59.  
  60. ; --Вывод шестнадцатиричного числа--
  61. xor DI,DI           ; обнуляем после вывода в 10сс !
  62. mov DI, offset msg2        
  63. push DI
  64.                
  65. mov AX, res         ; сохраняем значение результата в ax
  66. mov BX, 16         
  67. xor CX, CX         
  68. inHex:  
  69.     xor DX, DX     
  70.     div BX         
  71.     cmp DL, 9       ; тк основание сс больше 10
  72.     jbe oi1
  73.     add DL, 7       ; основание сс 16
  74.     oi1:
  75.         add DL, 30h
  76.     push DX        
  77.     inc CX         
  78.     or AX, AX      
  79.     jne inHex       ; переход по адресу inHex, если частное не ноль  (продолжаем до конца числа)
  80.  
  81. mov [DI], byte ptr '0'      ;для вывода с незначащим нулем
  82. inc DI
  83.  
  84. makeStr2:
  85.     pop AX         
  86.     mov [DI], AL       
  87.     inc DI             
  88.     dec CX             
  89.     or CX, CX
  90.     jne makeStr2
  91.  
  92. mov AH, 09h        
  93. pop DI             
  94. mov DX, DI         
  95. int 21h
  96.  
  97. mov AX, 4C00h   ;завершение программы
  98. int 21h
  99. code ends
  100. end start
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement