Получение бинарного ввода x86 tasm - PullRequest
0 голосов
/ 30 апреля 2020

Как получить ввод, как на первом изображении, и использовать каждый бит для отображения различной информации. У меня есть бит [1: 0], который представляет тип комнаты, бит [8: 2] для нет. мест в наличии ... итак, всего 16 бит. Что я сделал, вместо того, чтобы получать ввод, я объявил статус комнаты как переменную (room_status dw 0110111101111101b), все работает, но мне нужно получить статус комнаты как пользовательский ввод. Как я go об этом?

enter image description here

data segment

nl          db 0ah, 0dh, '$'

w_board     db "White Board$"
b_board     db "Black_board$"
computer    db "Computer$"
projector   db "Projector"

room_status dw 0110111101111101b
room_type   db ?
num_seats   db ?
dep_ID      db ?
proj_comp   db ?
bw_board    db ?
PA_system   db ?

str1        db "Type of the room       : $"
str2        db "Number of seats        : $"
str3        db "Department                 : $"
str4        db "Overhead Projector/Computer: $"
str5        db "Black Board/White Board    : $"
str6        db "P.A. System                : $"

data ends

temp segment stack
db 200h dup(?)
temp ends

code segment
    assume cs:code, ds:data, ss:temp
start:  mov ax,data
    mov ds,ax
    ;your code starts here
    mov ax, room_status
    and ax, 0000000000000011b
    mov room_type, al

    mov ax, room_status
    and ax, 0000000011111100b
    ror ax, 2
    mov num_seats, al

    mov ax, room_status
    and ax, 0001111100000000b
    ror ax, 8
    mov dep_ID, al

    mov ax, room_status
    and ax, 0010000000000000b
    rol ax, 3
    mov proj_comp, al

    mov ax, room_status
    and ax, 0100000000000000b
    rol ax, 2
    mov bw_board, al

    mov ax, room_status
    and ax, 1000000000000000b
    ror ax, 1
    mov PA_system, al
    ;======================================
    ;type of room
    lea dx, str1
    mov ah, 09h
    int 21h
    mov dl, room_type
    add dl,30h
    mov ah, 02h
    int 21h

    call newline
    ;=======================================
    ;no. of seats
    lea dx, str2
    mov ah, 09h
    int 21h

    mov ah, 0 
    mov al, num_seats
    cmp ax, 10
    jb  bp1
    mov bl, 10d
    div bl

    mov bh, ah ;save remainder in bh register
    mov dl, al
    add dl, 30h
    mov ah, 02h
    int 21h
    mov dl, bh ;second digit
    add dl,30h
    mov ah, 02h
    int 21h
    jmp bp2

bp1:    
    mov dl, al
    add dl, 30h
    mov ah, 02h
    int 21h
bp2:
    ;department id
    call newline

    lea dx, str3
    mov ah, 09h
    int 21h

    mov ah, 0
    mov al, dep_ID
    cmp ax, 10d
    jb  bp3
    mov bl, 10d
    div bl

    mov bh, ah ;save remainder in bh register
    mov dl, al
    add dl, 30h
    mov ah, 02h
    int 21h
    mov dl, bh ;second digit
    add dl,30h
    mov ah, 02h
    int 21h
    jmp overhead_pj_comp
bp3:
    mov dl, al
    add dl, 30h
    mov ah, 02h
    int 21h

overhead_pj_comp:
    call newline

    lea dx, str4
    mov ah, 09h
    int 21h

    mov al, proj_comp
    cmp al, 0
    je  bb
    lea dx,computer
    mov ah,09h
    int 21h
    jmp boardT
pjet:
    lea dx,projector
    mov ah,09h
    int 21h

boardT:
    call newline
    lea dx, str5
    mov ah,09h
    int 21h

    mov al, bw_board
    cmp al, 0
    je  bb
    lea dx,w_board
    mov ah,09h
    int 21h
    jmp paSystem
bb:
    lea dx,b_board
    mov ah,09h
    int 21h

paSystem:
    call newline
    lea dx, str6
    mov ah,09h
    int 21h

    mov dl,al
    add dl,30h
    mov ah,02h
    int 21h

done:
    mov ax,4c00h
    int 21h
newline proc
    lea dx, nl
    mov ah, 09h
    int 21h
    ret
newline endp

code ends
end start

Это вывод моей программы без ввода пользователя This is the output of my program without user input

...