Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Mango44
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
#1

Ввод-вывод - Assembler

01.06.2015, 20:41. Просмотров 787. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ввод-вывод (Assembler):

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

Ввод и вывод - Assembler
Доброго времени суток, не могли бы вы помочь мне в одной проблемке. Если возможно объясните в подробностях, точнее прокоменнтируйте, что и...

Ввод и вывод - Assembler
Написать com-программу, которая выведет на экран заранее записанную строку (используем переменные) в следующем порядке. В первой строке 1...

Ввод и вывод массива - Assembler
Здравствуйте. Возник вопрос на счёт работы с массивами. Итак, хочется ввести в консоли массив из 5 чисел в помощью ассемблерной вставки,...

Ввод и вывод массива - Assembler
Есть программа для обработки массива из 5 чисел, которая находит сумму абсолютных величин. Нужен код для ввода и вывода массива. data...

Ввод и вывод на экран - Assembler
Подскажите как мне реализовать следующую задачу. При нажатии клавиш (например F1, F2, F3) должны выводиться слова (например Фамилия, Имя,...

16
Ethereal
Нарушитель
4512 / 1371 / 182
Регистрация: 17.02.2013
Сообщений: 2,280
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
1819 / 329 / 27
Регистрация: 01.06.2011
Сообщений: 2,786
Записей в блоге: 1
02.06.2015, 11:58 #4
Mango44,

похоже OUTINT выводит только слово в AL причем как знаковое.
0
Constantin Cat
2375 / 909 / 289
Регистрация: 28.02.2015
Сообщений: 2,153
Завершенные тесты: 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
1819 / 329 / 27
Регистрация: 01.06.2011
Сообщений: 2,786
Записей в блоге: 1
02.06.2015, 12:25 #7
Цитата Сообщение от Mango44 Посмотреть сообщение
У меня получилось 65365(65536-171).

блин.так все правильно.а я тут голову ломаю. 171 ответ.не слушай никого.
0
Constantin Cat
2375 / 909 / 289
Регистрация: 28.02.2015
Сообщений: 2,153
Завершенные тесты: 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
1819 / 329 / 27
Регистрация: 01.06.2011
Сообщений: 2,786
Записей в блоге: 1
02.06.2015, 13:16 #9
Цитата Сообщение от Constantin Cat Посмотреть сообщение
FFAB
ну да.что -то я сам уже.
-85 получится,а него 171 выводит.
0
Constantin Cat
2375 / 909 / 289
Регистрация: 28.02.2015
Сообщений: 2,153
Завершенные тесты: 1
02.06.2015, 13:50 #10
Цитата Сообщение от Thread Посмотреть сообщение
а него 171 выводит.
Он посчитал как 00АВ16=17110=101010112 и не учел действия команды CBW, которая дублирует старший бит операнда до нужного размера.
0
Thread
programmer
1819 / 329 / 27
Регистрация: 01.06.2011
Сообщений: 2,786
Записей в блоге: 1
02.06.2015, 14:01 #11
Constantin Cat,

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

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

Все.прочитал его сообщение,ему только надо было выдать результат по коду.
Ну так да.Я подумал скомпилировал и выдал такой.
0
Constantin Cat
2375 / 909 / 289
Регистрация: 28.02.2015
Сообщений: 2,153
Завершенные тесты: 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
02.06.2015, 20:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2015, 20:25
Привет! Вот еще темы с ответами:

Ввод/вывод не работает - Assembler
Не корректно работает ввод/вывод, хотя все правильно сделала. Возможно причина в "шапке" в описании сегментов? Что я не так сделала? ...

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

Нужно доделать ввод/вывод - Assembler
Помогите доделать ввод/вывод. Программа для вычисления наибольшего общего делителя (НОД) k данных чисел. Количество чисел (k) и сами...

Ввод-вывод строки асемблер - Assembler
Определить в программе произвольную строку. Вывести на экран отдельно первый и второй символы . Ввести с клавиатуры новую строку с меньшим...


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

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

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