Работа с битами числа - установка, сдвиг, инверсия - Assembler
Формулировка задачи:
Здача:
1. Установить в 1 все биты младшего байта
2. циклично сдвинуть все байты вправо на 4 бита
3. Обратить 0,2,11,15 биты
MODEL SMALL
STACK 100h
DATASEG
Set_X DB 13,10,'X = $'
Result DB 13,10,'Result: $'
Result1 DB 13,10,'Result1: $'
Result2 DB 13,10,'Result2: $'
Result3 DB 13,10,'Result3: $'
error_ db 13,10,'incorrect number$'
error_question db 13,10,'incorrect answer$'
question_ db 13,10,'Close program? Yes - [Y],[y]; No - [N],[n] $'
buff dw 6,7 Dup(?)
CODESEG
start:
mov ax,@Data
mov ds,ax
m1:
mov dx,OFFSET Set_X
mov ah,09h
int 21h
mov ah,0ah
xor di,di
mov dx,offset buff
int 21h
mov dl,0ah
mov ah,02
int 21h
mov si,offset buff+2
cmp byte ptr [si],"-"
jnz ii1
mov di,1
inc si
ii1:
xor ax,ax
mov bx,10
ii2:
mov cl,[si]
cmp cl,0dh
jz endin
cmp cl,'0'
jl er
cmp cl,'9'
ja er
sub cl,'0'
mul bx
add ax,cx
inc si
jmp ii2
er:
mov dx, offset error_
mov ah,09
int 21h
jmp endprog
endin:
cmp di,1
jnz ii3
neg ax
ii3:
xchg cx,ax
mov dx,OFFSET Result
mov ah,09h
int 21h
xchg cx,ax
test ax, ax
jns oi1
mov cx, ax
mov ah, 02h
mov dl, '-'
int 21h
mov ax, cx
neg ax
oi1:
push ax
call output
;--------------1 ?????????? ???? ? 1
mov dx,OFFSET Result1
mov ah,09h
int 21h
pop ax
push ax
or al, 0ffh
call output
;--------------2
mov dx,OFFSET Result2
mov ah,09h
int 21h
pop ax
push ax
rol ax,4
call output
;--------------3
mov dx,OFFSET Result3
mov ah,09h
int 21h
pop ax
xor ax,01010111111b
call output
endprog:
mov ah,09h
mov dx, offset question_
int 21h
mov ah,01h
int 21h
cmp al,'Y'
jz m2
cmp al,'y'
jz m2
cmp al,'N'
jnz next_1
jmp m1
next_1:
cmp al,'n'
jnz next_2
jmp m1
next_2:
mov ah,09h
mov dx, offset error_question
int 21h
jmp endprog
m2:
mov ah,04ch
int 21h
jmp end___
output:
mov bx,ax
mov cx,16
ob1:
shl bx,1
jc ob2
mov dl,'0'
jmp ob3
ob2:
mov dl,'1'
ob3:
mov ah,2
int 21h
loop ob1
ret
end___:
end startРешение задачи: «Работа с битами числа - установка, сдвиг, инверсия»
textual
Листинг программы
xor ax,1000100000000101b