Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Mango44
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
#1

Ввод-вывод

01.06.2015, 20:41. Просмотров 799. Ответов 16
Метки нет (Все метки)

Здравствуйте! Дан кусок кода.Надо указать, что будет напечатано в результате выполнения команд?
Assembler
1
2
3
4
5
MOV AX,342
MOV BL,2
DIV BL
CBW 
OUTINT
В ответах написано,что будет напечатано -85.У меня получилось 65365(65536-171).Может кто-нибудь помочь разобраться
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2015, 20:41
Ответы с готовыми решениями:

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

Ввод и вывод
Доброго времени суток, не могли бы вы помочь мне в одной проблемке. Если...

Ввод и вывод чисел
Как ввести число 2017 ?; как вывести число 137?(если учесть, что необходимо...

Ввод и вывод с клавиатуры
ЗДравствуйте, товарищи. Ситуация такова, что учусь писать на ассемблере....

Ввод и вывод на экран
Подскажите как мне реализовать следующую задачу. При нажатии клавиш (например...

16
Ethereal
Заблокирован
02.06.2015, 00:28 #2
342 / 2 = 171 = 256 - 85
Так-что действительно -85
1
Mango44
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
02.06.2015, 11:36  [ТС] #3
Но у нас же AX размером в слово. Его длина 65536.Или я что-то путаю?
0
Thread
programmer
1870 / 331 / 27
Регистрация: 01.06.2011
Сообщений: 2,869
Записей в блоге: 1
02.06.2015, 11:58 #4
Mango44,

похоже OUTINT выводит только слово в AL причем как знаковое.
0
Constantin Cat
1917 / 1017 / 364
Регистрация: 28.02.2015
Сообщений: 2,275
Завершенные тесты: 1
02.06.2015, 12:02 #5
проверяем:
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
model   tiny
.code
org 100h
start:  mov ax,342
    mov bl,2
    div bl
    cbw
    mov di,ax
    call    @@02
    and di,0ffh
@@02:   mov ah,9
    lea dx,dbResult
    int 21h
    mov ax,di
    mov bx,16
    xor cx,cx
    mov ax,di
@@03:   xor dx,dx
    div bx
    push    dx
    inc cx
    or  ax,ax
    jnz @@03
@@04:   pop ax
    cmp al,9
    jbe @@05
    add al,7
@@05:   add al,'0'
    int 29h
    loop    @@04
    xor ax,ax
    int 16h
    ret
dbResult    db  10,13,'Result:$'
    end start
0
Mango44
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
02.06.2015, 12:03  [ТС] #6
OUTINT -выводит число со знаком. В качестве его операндов может быть только шестнадцатиразрядный регистр.
0
Thread
programmer
1870 / 331 / 27
Регистрация: 01.06.2011
Сообщений: 2,869
Записей в блоге: 1
02.06.2015, 12:25 #7
Цитата Сообщение от Mango44 Посмотреть сообщение
У меня получилось 65365(65536-171).

блин.так все правильно.а я тут голову ломаю. 171 ответ.не слушай никого.
0
Constantin Cat
1917 / 1017 / 364
Регистрация: 28.02.2015
Сообщений: 2,275
Завершенные тесты: 1
02.06.2015, 12:26 #8
Ребята вспоминаем представление знаковых чисел:
FFAB=1111 1111 1010 1011
инвертируем
0000 0000 0101 0100 + 1
0000 0000 0101 0101 =85
0
Thread
programmer
1870 / 331 / 27
Регистрация: 01.06.2011
Сообщений: 2,869
Записей в блоге: 1
02.06.2015, 13:16 #9
Цитата Сообщение от Constantin Cat Посмотреть сообщение
FFAB
ну да.что -то я сам уже.
-85 получится,а него 171 выводит.
0
Constantin Cat
1917 / 1017 / 364
Регистрация: 28.02.2015
Сообщений: 2,275
Завершенные тесты: 1
02.06.2015, 13:50 #10
Цитата Сообщение от Thread Посмотреть сообщение
а него 171 выводит.
Он посчитал как 00АВ16=17110=101010112 и не учел действия команды CBW, которая дублирует старший бит операнда до нужного размера.
0
Thread
programmer
1870 / 331 / 27
Регистрация: 01.06.2011
Сообщений: 2,869
Записей в блоге: 1
02.06.2015, 14:01 #11
Constantin Cat,

Цитата Сообщение от Constantin Cat Посмотреть сообщение
не учел действия команды CBW
что значит не учел? Она расширит до -85 как раз,а у него 171 выводит.
Он ведь написал что верный ответ должен -85,а у него 171 выводит.Вот где собачка.
0
Constantin Cat
1917 / 1017 / 364
Регистрация: 28.02.2015
Сообщений: 2,275
Завершенные тесты: 1
02.06.2015, 14:10 #12
CBW из АВ16 делает FFAB16, а он наверное считал, в результате действия команды будет 00АВ16

Добавлено через 4 минуты
Цитата Сообщение от Mango44 Посмотреть сообщение
Надо указать, что будет напечатано в результате выполнения команд?
Он не проверял код, практически это задание на знание работы команд, т.е. как изменится байт после действия той или иной команды.
0
Thread
programmer
1870 / 331 / 27
Регистрация: 01.06.2011
Сообщений: 2,869
Записей в блоге: 1
02.06.2015, 14:11 #13
Constantin Cat,

Все.прочитал его сообщение,ему только надо было выдать результат по коду.
Ну так да.Я подумал скомпилировал и выдал такой.
0
Constantin Cat
1917 / 1017 / 364
Регистрация: 28.02.2015
Сообщений: 2,275
Завершенные тесты: 1
02.06.2015, 14:18 #14
Mango44
Перечитайте данную тему, общими усилиями был получен ответ на Ваш вопрос.
0
Mango44
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
02.06.2015, 20:25  [ТС] #15
На самом деле я не совсем понял выше решение.
MOV AX,342
MOV BL,2
DIV BL
В AH-остаток от деления(в нашем случае 0),в AL-частное(в нашем случае 171)
AX 16-ти разрядный регистр имеющей размер слово.
CWD-расширение слова до двойного слова.
Если AX>0(как в нашем случае) в DX заносятся 0000h
OUTINT -выводит число со знаком. В качестве его операндов может быть только шестнадцатиразрядный регистр.
И почему вдруг будет выведено -85?

Добавлено через 16 минут
Точнее CBW-расширение байта до слова.
Если Al>0(как в нашем случае там 171) то в Ah записываются 00h
0
Constantin Cat
1917 / 1017 / 364
Регистрация: 28.02.2015
Сообщений: 2,275
Завершенные тесты: 1
02.06.2015, 21:44 #16
Лучший ответ Сообщение было отмечено Mango44 как решение

Решение

Mango44
Цитата Сообщение от Mango44 Посмотреть сообщение
Если AX>0(как в нашем случае) в DX заносятся 0000h
CBW берет старший бит 101010112 байта и заполняет им разширяемую часть слова, т.е. получается уже не 00AB16, a FFAB16, остальное о переводе знаковых чисел я писал выше.

Добавлено через 36 минут
Цитата Сообщение от Mango44 Посмотреть сообщение
Если Al>0(как в нашем случае там 171) то в Ah записываются 00h
Вы забыли, что знаковый диапазон байта -128 : 127.
1
Mango44
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
02.06.2015, 22:38  [ТС] #17
Спасибо всем большое! Разобрался!
0
02.06.2015, 22:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2015, 22:38

Ввод/вывод не работает
Не корректно работает ввод/вывод, хотя все правильно сделала. Возможно причина...

Ввод и вывод массива
Здравствуйте. Возник вопрос на счёт работы с массивами. Итак, хочется ввести в...

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


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

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

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