Консультация № 72117
22.01.2007, 17:13
0.00 руб.
0 3 3
Здравствуйте. Ответьте ожалуйста вот на такой вопрос.

Предположим что регистр DX содержит 1011100110111001, а регистр CL - 03. Определить содержимое регистра DX после следующих команд.
1. SHR DX,1
2. SHR DX,CL
3. SHL DX,CL
4. SHL DL,1
5. ROR DX,CL
6. ROR DL,CL
7. SAL DH,1
И ещё такие вопросы

1)Используя команды сдвига, пересылки и сложения, умножить содержимое регистра AX на 10
2) Напишите программу, которая умножает содержимое пары регистров DX:AX на 2. Измениет программу для: 1. Умножения на 4, 2. Деления на 4, 3. умножение 48 бит в регистрах DX:AX:BX на 2.

Зарание благодарю!!!

Обсуждение

давно
Советник
419
1011
22.01.2007, 17:30
общий
это ответ
Здравствуйте, Александр Логвиненко!

1011100110111001

1. 0101110011011100
2. 0000101110011011
3. 0101110011011000
4. 0101110010110000
5. 0000101110010110
6. 0000101111010010
7. 0001011011010010

AX можно умножить на 10, если умножить сначала на 8, потом прибавить два оригинала.

shl ax, 1
rcl dx, 1

и т.д.

удачи!
Неизвестный
23.01.2007, 03:38
общий
это ответ
Здравствуйте, Александр Логвиненко!

Вообще-то неплохо было бы самому решить задачки...

DX=16D2 (кстати SHR и SAL одна и таже команда)

1) для уножение на 10 умножаем исходноечисло на 2 запоминаем, умножаем исходноечисло на 8, складываем с запомненым (x*10=x*8+x*2), *2 смотри ниже:
SHL AX,1 ; AX*2
MOV BX,AX ;запомним

SHL AX,1 ;(AX уже умножено на 2) умножим еще на 2
SHL AX,1 ;(AX уже умножено на 4) умножим еще на 2 = AX*8
ADD AX,BX ;AX*10 = (BX=(AX*2)) + AX*8

2) для умножение на 2 нужно сдвинуть регистр влево на 1 бит например командой SHR, старший бит уйдет в CF, чтобы его не потерять сдвинем второй регистр командой RCL:
SHL AX,1; RCL DX,1 = DX:AX*2
соответсвенно два раза:SHL AX,1; RCL DX,1; SHL AX,1; RCL DX,1 = DX:AX*4
Деление - сдвиг вправо: SHR DX,1; RCR AX,1 = DX:AX/2
Ну и отсюда следует:
SHL BX,1; RCL AX,1; RCL DX,1 = DX:AX:BX*2
давно
Старший Модератор
31795
6196
25.01.2007, 11:00
общий
это ответ
Здравствуйте, Александр Логвиненко!

1. SHR DX,1 0101.1100.1101.1100
2. SHR DX,CL 0001.0111.0011.0111
3. SHL DX,CL 1100.1101.1100.1000
4. SHL DL,1 1011.1011.0111.0010
5. ROR DX,CL 0011.0111.0011.0111
6. ROR DL,CL 1011.1001.0011.0111
7. SAL DH,1 0111.0011.1011.1001
остальное в приложении

Приложение:
1) xor ax,ax mov al,<число> shl ax,1 mov bx,ax shl ax,2 add ax,bxв итоге в ах будет число умноженное на 102)а. для умножения:; при умножении на 2 строки где в коментариях стоит "?" можно убрать;при умножении 48 бит в отмеченных строках убрать коментарии в начале строки; mov bx,Data_0 ;для 48 бит грузим bx mov ax,Data_1 ;грузим ax mov dx,Data_2 ;грузим dx mov cx,2 ;? степини 2-киnext: clc ;сброс флага cf=0; rcl bx,1 ;для 48 бит bx=2*bx rcl ax,1 ;ax=2*ax+cf rcl dx,1 ;dx=2*dx+cf loop next ;?в. для деления:(деление с ошибкой rcl ->rcr ) mov ax,Data_1 ;грузим ax mov dx,Data_2 ;грузим dx mov cx,2 ; степини 2-киnext: clc ;сброс флага cf=0 rcr dx,1 ;dx=dx/2 + 0 rcr ax,1 ;ax=ax/2 + cf(младший бит dx) loop next ;повторить сх раз
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа