Работа с битами числа - установка, сдвиг, инверсия - 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

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


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

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

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