Другие языки программирования и технологии

Assembler Запись / Record, Маска

Помогите понять и устранить мою ошибку.
Вот код:
;...
rec record i1:1=1, i2:1=1, i3:1=0, i4:1=1, i5:1=0, i6:1=1, i7:1=0, i8:1=1
;...
.data
;...
.code
.startup
;...

mov ah, 0
mov al, b
;1101 0101
mov al, mask i3
; По плану, должно быть такое значение? или я не так понял.. .
; 0000 0000

;Далее вывод на экран
;...

Как работает mask? Я думал, он затирает все кроме поля в записи, в данном случае i3
В данной ситуации, на экран выводит 32
У этого числа двоичный код: 00100000
ОН заменил i3 на 1
Почему, что я не так сделал?
Мне нужно было, чтоб исправить эту проблему использовать команды сдвигов и and?

Помогите, пожалуйста понять, я хочу выучить и знать ассемблер хоть на начальном уровне.
mov al, b - не понятно, что такое b. Вероятно, переменная в сегменте данных.

>
;1101 0101
mov al, mask i3
; По плану, должно быть такое значение? или я не так понял.. .
; 0000 0000

Не совсем понятно, что к чему относится.
Унарная операция MASK создает маску на основе битового поля, в котором биты в возвращаемом значении устанавливаются в 1 и соответствуют битам в поле, которое представляет идентификатор.

Возможно, на примере будет понятнее:

.model small

rec record i1:2=11, i2:1=0, i3:1=1, i4:1=0, i5:1=1

.data
Flags rec ?

.code
Start:
        mov ax, @data
        mov ds, ax

        mov al, mask i2 ; 00001000b - поле i2 расположено в 3-бите записи
        mov ah, mask rec ; 00111111b - всего в записи используется 6 бит
        mov bl, width i2 ; 1 - ширина поля i2 - 1 бит
        mov bh, width rec ; 6 - ширина всей записи
       
        mov dl, mask i1 ; 00110000b - маска для поля i1
        mov dh, width i1 ; 2 - ширина поля i1
       
        mov cl, rec ; 00111111b - это тоже маска всей записи
        mov Flags, cl
       
        mov ch, mask i4 ; 00000010b
        and ch, Flags ; получили значение поля i4

        mov ch, mask i4
        not ch
        and Flags, ch ; Сбросили поле i4 в 0
        mov ch, mask i4
        or Flags, ch ; установили поле i4 в 1

        mov ah, 4Ch
        int 21h
        end Start

Посмотрите листинг, созданный ассемблером. В нём видно, какие маски загружаются в регистры.
В отладчике пройдите по шагам.
Гена Ошмарин
Гена Ошмарин
51 590
Лучший ответ