На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Помогите разобраться с кодом tasm , арифметика на assembler
    Добрый день! Помогите, пожалуйста, разобраться с кодом. Прога работает но я не могу сообразить как происходит вычисление результата. Если можно, прокомментируйте код.
    Задание следующее: Программа должна посчитать С=А/2+В. Установить все нечетные биты С. Расчет должен быть выполнен с использованием процедуры с передачей параметров через директивы. Вывести на экран число С и все промежуточные числа в двоичном виде, с использованием макроса.

    ExpandedWrap disabled
      input macro     ;Макрос ввода двух чисел в десятичном виде
          mov bl, 0  
          lea dx, str1
          mov ah, 9  
          int 21h
          l1:
              mov ah, 1
              int 21h
              cmp al, 13
              je l2
              sub al, 30h
              cmp al, 9
              jle l3
              sub al, 7
              cmp al, 15
              jle l3
              sub al, 20h
              jmp l3
          l2:
              cmp bl, 1
              je l4
              inc bl
              mov ch, cl
              xor cl, cl  
              lea dx, el
              mov ah, 9
              int 21h    
              lea dx, str2
              int 21h
              jmp l1    
          l3:
              shl cl, 4
              add cl, al
              jmp l1
          l4:
      endm
       
      outn macro n    ;макрос вывода на экран
        lea dx, el
        mov ah, 9
        int 21h  
        lea dx, str3
        int 21h
        mov cx, 16
        xor dl, dl    
        o1:
           rol n, 1
           adc dl, 30h
           mov ah, 2
           int 21h    
           xor dl, dl
           loop o1
      endm
       
      calc macro  ;макрос вычисления результата
      mov es, ax  
          mov bx, cx
          sub cl, 5h
          mov al, 2
          mul cl
          add al, ch
          xor cx, cx  
          test al, 00010000b
          jnz c1
          mov cl, bl
          jmp e  
          c1:
             mov cl, bh
          e:
      endm
       
      dseg segment
        str1 db 'A = $'   ;текстовые строки для вывода на экран
        str2 db 'B = $'
        str3 db 'C = A/2 + B = $'
        el db 10, 13, '$'
      dseg ends
      sseg segment stack
          db 60 dup (?)  
      sseg ends
      cseg segment
          assume cs:cseg, ds:dseg, ss:sseg
      main proc      
              mov ax, dseg    
              mov ds, ax  
          input
          calc
          mov bx, cx
        
          outn bx
              
          mov ah, 4ch
          int 21h    
          main endp      
      cseg ends
      end main
    Сообщение отредактировано: Qraizer -
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0175 ]   [ 15 queries used ]   [ Generated: 23.04.24, 20:57 GMT ]