Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
PollySolar
0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 3
1

Вывод на экран содержимого регистра bx в 16-ричном виде

02.12.2016, 23:31. Просмотров 1255. Ответов 1
Метки нет (Все метки)

Добрый вечер всем. Имеется код подсчета двоичных нулей в переменной размером двойное слово. Не могу вывести на экран количество нулей, хранящихся в регистре bx. Вывести нужно в 16-тиричном виде. Пробовала статейку (Ввод и вывод чисел в различных системах счисления) - результата нет. Заранее спасибо за помощь и пояснения.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
.model small
.stack 100h
.data
 
mes1   DB 'Zadannoe 4islo:', 13, 10, '$'
mes2   DB '', 13, 10, '$'
mes3   DB 'Kolichestvo nylei:', 13, 10, '$'
 
PER    dd 1110101000100010b
KOL    equ 1
 
.code                           
Start:    
MOV AX, @DATA
MOV DS, AX
xor AX, AX
xor BX, BX
 
mov AH, 09h             ; выводить
mov DX, OFFSET mes1     ; сообщение
int 21h                 ; на экран
 
 
    lea si,PER           ; загружаем в si адрес нашего двоичного числа
    mov cx, KOL          ; пересылаем в регистр cx количество элементов
    call ShowArray       ; вызов процедуры вывода на экран  
    mov dx,[si]          ; пересылаем в dx значение элемента
    mov cx,16            ; пересылаем в cx количество битов в элементах
 
met:    rcl dx,1        
    JNC met_1
met_2:  loop met
        mov AH, 09h          ; выводить
        mov DX, OFFSET mes2  ; сообщение
        int 21h              ; на экран
        mov DX, OFFSET mes2  
        int 21h              
        mov DX, OFFSET mes3
        int 21h
    JMP met_3
met_1:  inc bl 
 
    JMP met_2
 
met_3:  
    mov AX, 4C00h                           
    int 21h 
 
ShowArray proc
@@for:
        mov ax, [si]         ; пересылаем в регистр ax, значение массива
        call ShowWord        ; вызов процедуры
        mov al, ' '          ; пробел между элементами
 
        int 29h              ; 
        add si, 2            ; +
        loop @@for           ; вычитает единицу из CX, если больше нуля то 
                             ; переход на указанную метку
        ret                  ; вернуться из подпрограммы
ShowArray endp
 
;--------------------
ShowWord proc
        push ax              ; загружаем ax в стек (значение в ячейку памяти)
        push dx              ; загружаем dx в стек
        push cx              ; загружаем cx в стек
 
        mov cx,16            ; пересылаем в cx, количество битов
        mov dx, ax           ; пересылаем в регистр dx 
@@ForEachBit:
        mov al, '0'          ; пересылка в al, символьную строку
        shl dx, 1            ; сдвиг dx влево, кол-во сдвигов
        adc al, 0            ; сложение двух операндов, прибавляя к ним значение cx
        int 29h
 
        loop @@ForEachBit    ; переход к метке, если больше 0
 
        pop cx               ; выгружаем cx из стека
        pop dx               ; выгружаем dx из стека
        pop ax               ; выгружаем ax из стека
        ret                  ; вернуться из подпрограммы
ShowWord endp
                                   
END Start
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2016, 23:31
Ответы с готовыми решениями:

Вывод содержимого регистра AL на экран?
Как можно сделать? Добавлено через 50 минут TITLE SPO_PROJECT (COM) .MODEL SMALL .CODE...

Вывод содержимого регистра на экран
Вопрос глупый, но нигде не могу найти однозначный ответ. Как мне вывести чисто в ax на экран? org...

[MASM] Вывод значения переменной (или содержимого регистра) на экран
Здравствуйте! По очень простому вопросу никак не могу найти ответ. Например пара фрагментов:...

Вывод содержимого регистра
я ввел строку с клавиатуры, и проверяю каждый символ, если символ равен пробелу то я увеличиваю...

Напишите программу для вывода на экран содержимого регистра DS
Напишите программу для вывода на экран содержимого регистра DS. Допустим, что байт, значение...

1
proc3nt
волшебник
947 / 520 / 156
Регистрация: 26.05.2012
Сообщений: 1,471
03.12.2016, 16:20 2
Лучший ответ Сообщение было отмечено PollySolar как решение

Решение

Цитата Сообщение от PollySolar Посмотреть сообщение
в переменной размером двойное слово
Цитата Сообщение от PollySolar Посмотреть сообщение
PER dd 1110101000100010b
Цитата Сообщение от PollySolar Посмотреть сообщение
mov cx,16
Цитата Сообщение от PollySolar Посмотреть сообщение
add si,2
в двойном слове 32 бита. твои процедуры расчитаны на обработку обычного слова
Цитата Сообщение от PollySolar Посмотреть сообщение
в переменной
Цитата Сообщение от PollySolar Посмотреть сообщение
KOL equ 1
Цитата Сообщение от PollySolar Посмотреть сообщение
ShowArray proc
про массив чисел в условии ничего не сказано

для одной переменной размером слово
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
.model small
.386
 
.data
mes1 db 'zadannoe 4islo: $'
mes2 db 13,10,'$'
mes3 db 'kolichestvo nylei: $'
 
per dw 1001010000010100b
 
.stack 
db 255 dup(?)
 
.code
start:
mov ax,@data
mov ds,ax
 
mov ah,09h
lea dx,mes1
int 21h
 
mov dx,per
 
call showword
 
xor ax,ax
mov cx,16
met:
shl dx,1
jc met1
 
inc al
 
met1:
loop met
 
push ax
 
mov ah,09h
lea dx,mes2
int 21h
 
mov ah,09h
lea dx,mes3
int 21h
 
pop ax
 
mov bx,16
xor cx,cx
get:
xor dx,dx
div bx
push dx
inc cx
 
or ax,ax
jnz get
 
cmp cx,1
jne big
 
mov ah,02h
mov dl,'0'
int 21h
 
big:
mov ah,02h
print:
pop dx
 
cmp dl,09h
jbe skip
 
add dl,7
 
skip:
add dl,30h
 
int 21h
loop print
 
mov ah,02h
mov dl,'h'
int 21h
 
mov ah,4Ch
mov al,00h
int 21h
 
showword proc
push ax
push dx
push cx
 
mov cx,16
foreachbit:
mov al,'0'
shl dx,1
adc al,0
int 29h
loop foreachbit
 
pop cx
pop dx
pop ax
 
ret
showword endp
 
end start
Добавлено через 30 минут
размером двойное слово
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
.model small
.386
 
.data
mes1 db 'zadannoe 4islo: $'
mes2 db 13,10,'$'
mes3 db 'kolichestvo nylei: $'
 
per dd 00000100000000000000001000100000b
 
.stack 
db 255 dup(?)
 
.code
start:
mov ax,@data
mov ds,ax
 
mov ah,09h
lea dx,mes1
int 21h
 
mov edx,per
 
call showword
 
xor ax,ax
mov cx,32
met:
shl edx,1
jc met1
 
inc al
 
met1:
loop met
 
push ax
 
mov ah,09h
lea dx,mes2
int 21h
 
mov ah,09h
lea dx,mes3
int 21h
 
pop ax
 
mov bx,16
xor cx,cx
get:
xor dx,dx
div bx
push dx
inc cx
 
or ax,ax
jnz get
 
cmp cx,1
jne big
 
mov ah,02h
mov dl,'0'
int 21h
 
big:
mov ah,02h
print:
pop dx
 
cmp dl,09h
jbe skip
 
add dl,7
 
skip:
add dl,30h
 
int 21h
loop print
 
mov ah,02h
mov dl,'h'
int 21h
 
mov ah,4Ch
mov al,00h
int 21h
 
showword proc
push eax
push edx
push ecx
 
mov cx,32
foreachbit:
mov al,'0'
shl edx,1
adc al,0
int 29h
loop foreachbit
 
pop ecx
pop edx
pop eax
 
ret
showword endp
 
end start
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2016, 16:20

Ввод символьной строки,вывод содержимого соответствующего регистра(TASM)
Необходимо ввести символьную строку,проанализировать ее.Если строка соответствует имени какого-то...

Вывод содержимого регистра на экран в Windows x64
ДОСовское int 21h не работает, потому что винда не поддерживает 16-битные приложения. Есть ли...

Вывод в 16-ричном виде
у меня допустим есть переменная uint8_t p; для вывода в десятичной системе счисления я делаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru