Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10984
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4141
∙ повысить рейтинг »
Куликов Роман Евгеньевич
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1565
Дата выхода:04.10.2015, 19:51
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:14 / 7
Вопросов / ответов:1 / 1

Консультация # 188072: Уважаемые эксперты! Пожалуйста, помогите: у меня задача следующая: Разработать с помощью Debug программу, выполняющую вывод на экран текстового сообщения и последующее вычисле- ние выражения: Y=[(Х1+Х2)ХЗ–Х4]/Х5, где Х1—Х5 — десятичные целые числа, выбранные в соответст- вии с номером варианта из таблицы 3. Результат выч...


Консультация # 188072:

Уважаемые эксперты! Пожалуйста, помогите:
у меня задача следующая:

Разработать с помощью Debug программу, выполняющую
вывод на экран текстового сообщения и последующее вычисле-
ние выражения:
Y=[(Х1+Х2)ХЗ–Х4]/Х5,
где Х1—Х5 — десятичные целые числа, выбранные в соответст-
вии с номером варианта из таблицы 3.
Результат вычисления выражения программа помещает в
регистры AX и DX. Нужно вывести эти результаты в двоичной
системе счисления.
Структура выходного сообщения программы:
“Программа вычисления выражения Y=[(Х1+Х2)ХЗ–Х4]/Х5, где
X1=..., X2=..., X3=..., X4=..., X5=...”
AX=0011110111000101 DX=0000000000010101
Промежуточные результаты можно будет наблюдать при
запуске программы в debug, выполняя пошаговое выполнение
инструкций.
Вместо точек должны выводиться заданные числа (в шест-
надцатеричной системе).

Вот сделала:

Код :
MOV     AH,09
MOV     DX,200
INT     21
MOV     AX,01B4 //x1
MOV     BX,0147   //x2
ADD     AX,BX         //сложение
MOV     BX,000D        //х3
MUL     BX                       //умножаем сумму на х3
MOV     BX,0CF3                   //х4
SUB     AX,BX              //вычитаем из произведения х4
MOV     BX,0012          //х5
DIV     BX               //делим на х5
MOV     AH,0
INT     16
INT     20


Не знаю как сделать структуру выходного сообщения по шаблону : “Программа вычисления выражения Y=[(Х1+Х2)ХЗ–Х4]/Х5, где
X1=..., X2=..., X3=..., X4=..., X5=...”

Может кто-нибудь чем-нибудь поможет?! я совсем новичок.

Дата отправки: 01.10.2015, 19:18
Вопрос задал: Евгения (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, Посетитель - 398689!
Вот код:

Код :
model	tiny
code
org	100h
start:
MOV     AX,01B4h;x1
MOV     BX,0147h;x2
ADD     AX,BX;сложение
MOV     BX,000Dh;х3
MUL     BX;умножаем сумму на х3
MOV     BX,0CF3h;х4
SUB     AX,BX;вычитаем из произведения х4
sbb	dx,0
MOV     BX,0012h;х5
DIV     BX;делим на х5
;
lea   si,dbAX
call   outBin
lea   si,dbDx
mov   ax,dx
Call   outBin
mov   ah,9
lea   dx,dbOut
int   21h
xor   ax,ax
int   16h
ret
OutBin:
mov   cx,16
@@01:
xor   bx,bx
shl   ax,1
adc   bl,'0'
mov   [si],bl
inc   si
loop   @@01
ret
;тут можно поставить ORG 200h, но у Вас уже есть все адреса.
dbOut db 10,13,'Программа вычисления выражения Y=[(Х1+Х2)ХЗ–Х4]/Х5, где:'
db 10,13,'X1=01B4h,'
db 10,13,'X2=0147h,'
db 10,13,'X3=000Dh,'
db 10,13,'X4=0CF3h,'
db 10,13,'X5=0012h'
db 10,13,'AX='
dbAX db 16 dup(?),' DX='
dbDX db 16 dup(?),'$'
end	start

Листинг кода:
Код :
     1	0000			     model   tiny
      2	0000			     .code
      3				     org     100h
      4	0100			     start:
      5	0100  B8 01B4		     MOV     AX,01B4h;x1
      6	0103  BB 0147		     MOV     BX,0147h;x2
      7	0106  03 C3		     ADD     AX,BX;сложение
      8	0108  BB 000D		     MOV     BX,000Dh;х3
      9	010B  F7 E3		     MUL     BX;умножаем сумму на х3
     10	010D  BB 0CF3		     MOV     BX,0CF3h;х4
     11	0110  2B C3		     SUB     AX,BX;вычитаем из произведения х4
     12	0112  83 DA 00		     sbb     dx,0
     13	0115  BB 0012		     MOV     BX,0012h;х5
     14	0118  F7 F3		     DIV     BX;делим на х5
     15				     ;
     16	011A  BE 01B9r		     lea   si,dbAX
     17	011D  E8 0014		     call   outBin
     18	0120  BE 01CDr		     lea   si,dbDx
     19	0123  8B C2		     mov   ax,dx
     20	0125  E8 000C		     Call   outBin
     21	0128  B4 09		     mov   ah,9
     22	012A  BA 0144r		     lea   dx,dbOut
     23	012D  CD 21		     int   21h
     24	012F  33 C0		     xor   ax,ax
     25	0131  CD 16		     int   16h
     26	0133  C3		     ret
     27	0134			     OutBin:
     28	0134  B9 0010		     mov   cx,16
     29	0137			     @@01:
     30	0137  33 DB		     xor   bx,bx
     31	0139  D1 E0		     shl   ax,1
     32	013B  80 D3 30		     adc   bl,'0'
     33	013E  88 1C		     mov   [si],bl
     34	0140  46		     inc   si
     35	0141  E2 F4		     loop   @@01
     36	0143  C3		     ret
     37				     ;тут можно поставить ORG 200h, но у Вас уже есть все адреса
     38	0144  0A 0D CF F0 EE E3	F0+  dbOut db 10,13,'Программа вычисления выражения Y=[(Х1+Х2)ХЗ–Х4]/Х5, где:'
     39	      E0 EC EC E0 20 E2	FB+
     40	      F7 E8 F1 EB E5 ED	E8+
     41	      FF 20 E2 FB F0 E0	E6+
     42	      E5 ED E8 FF 20 59	3D+
     43	      5B 28 D5 31 2B D5	32+
     44	      29 D5 C7 96 D5 34	5D+
     45	      2F D5 35 2C 20 E3	E4+
     46	      E5 3A
     47	017E  0A 0D 58 31 3D 30	31+  db	10,13,'X1=01B4h,'
     48	      42 34 68 2C
     49	0189  0A 0D 58 32 3D 30	31+  db	10,13,'X2=0147h,'
     50	      34 37 68 2C
     51	0194  0A 0D 58 33 3D 30	30+  db	10,13,'X3=000Dh,'
     52	      30 44 68 2C
     53	019F  0A 0D 58 34 3D 30	43+  db	10,13,'X4=0CF3h,'
     54	      46 33 68 2C
     55	01AA  0A 0D 58 35 3D 30	30+  db	10,13,'X5=0012h'
     56	      31 32 68
     57	01B4  0A 0D 41 58 3D	     db	10,13,'AX='
     58	01B9  10*(??) 20 44 58 3D    dbAX db 16	dup(?),' DX='
     59	01CD  10*(??) 24	     dbDX db 16	dup(?),'$'
     60				     end     start

Он Вам пригодится когда будете вводить адреса и данные в Debug.

Debug:
Команды:
-a 100 -ввод мнемоники ассемблера;
-e 100 -ввод кодов в 16-ой системе;
(адрес можно вводить без пробела)
-g -запуск программы на выполнение.

У Вас должно получится приблизительно так:


А ещё, код в кодировке ср1251, для того, чтобы не подучить "крякозяблы" данные должны быть такими:
Код :
    38	0144  0A 0D 8F E0 AE A3	E0+  dbOut db 10,13,'Программа вычисления выражения Y=[(Х1+Х2)ХЗЦХ4]/Х5, где:'
     39	      A0 AC AC A0 20 A2	EB+
     40	      E7 A8 E1 AB A5 AD	A8+
     41	      EF 20 A2 EB E0 A0	A6+
     42	      A5 AD A8 EF 20 59	3D+
     43	      5B 28 95 31 2B 95	32+
     44	      29 95 87 96 95 34	5D+
     45	      2F 95 35 2C 20 A3	A4+
     46	      A5 3A

Это кодировка DOS886.
Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 03.10.2015, 00:28

5
нет комментария
-----
Дата оценки: 03.10.2015, 08:24

Рейтинг ответа:

НЕ одобряю +3 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное