Нет возможности воспользоваться отладчиком. написал код. Хочу знать будет ли он работать.
в целом надо передать в вызываемую функцию параметр N по значению. Вернуть параметр 2N по ссылке.
mov ax,06h; передать параметр N в функцию delay (передача по значению)
mov dx,00h;
call delay
delay :
mov bx,ax; получить параметр
replay:
nop
dec bx
cmp bx,dx; bx = 0 ?
JNE replay; нет. Перейти к метке
mov bx,02h
mul bx; получение значения 2N
mov bx,ax
lea si,[bx]; получение адресса по которому находится значение 2N (правильно ли я использовал эту команду? )
mov ax,[si] ; возвратить значение 2N (возврат по ссылке)
ret ;возврат из подпрограммы
Другие языки программирования и технологии
Будет ли работать программа? ассемблер.
mov ax,06
mov dx,00
call delay
delay:
mov bx,ax
зачем танцы с регистрами... .
push 6
call delay
delay:
pop bx
тоже не оптимальный вариант
dec bx
cmp bx,dx; bx = 0 ?
JNE replay;
Смотри переход JNZ по флагу ...если нет нуля
dec bx
jnz replay
да и са м цикл нафига ?
push 6
call delay
delay:
pop ax
shl ax,1
// БРЕД
lea si,[bx]; получение адресса по которому находится значение 2N (правильно ли я использовал эту команду? ) /
mov ax,[si] ; возвратить значение 2N (возврат по ссылке)
2N находится в регистре. . получить адрес регистра? ))
mov rezult,ax
lea ax,rezult
ret
mov dx,00
call delay
delay:
mov bx,ax
зачем танцы с регистрами... .
push 6
call delay
delay:
pop bx
тоже не оптимальный вариант
dec bx
cmp bx,dx; bx = 0 ?
JNE replay;
Смотри переход JNZ по флагу ...если нет нуля
dec bx
jnz replay
да и са м цикл нафига ?
push 6
call delay
delay:
pop ax
shl ax,1
// БРЕД
lea si,[bx]; получение адресса по которому находится значение 2N (правильно ли я использовал эту команду? ) /
mov ax,[si] ; возвратить значение 2N (возврат по ссылке)
2N находится в регистре. . получить адрес регистра? ))
mov rezult,ax
lea ax,rezult
ret
Почти всё верно. Я бы только исправил:
- после call delay поставь ret (иначе у тебя delay будет 2 раза вызываться)
- команда mul bx не умножает bx на 2, а перемножает bx (со значением 2) и ax (а там у тебя 6 судя по коду) лучше замени эту команду на add - она быстрее работает (типа так: mov ax, bx; add bx;).
- с lea немного напутали. да и как можно вообще число хранимое в регистре процессора передавать по ссылке? Ведь оно вообще не хранится в памяти и адреса не имеет. оперативная память и регистры процессора это разные вещи. получается чтобы передать значение по ссылке нужно записать это число в память на любой свободный адрес и потом передавать этот адрес.
- после call delay поставь ret (иначе у тебя delay будет 2 раза вызываться)
- команда mul bx не умножает bx на 2, а перемножает bx (со значением 2) и ax (а там у тебя 6 судя по коду) лучше замени эту команду на add - она быстрее работает (типа так: mov ax, bx; add bx;).
- с lea немного напутали. да и как можно вообще число хранимое в регистре процессора передавать по ссылке? Ведь оно вообще не хранится в памяти и адреса не имеет. оперативная память и регистры процессора это разные вещи. получается чтобы передать значение по ссылке нужно записать это число в память на любой свободный адрес и потом передавать этот адрес.
в bx хранится число 2N
оператор [bx] загружает значение, хранящееся в памяти по адресу 2N - что там хранится неизвестно
lea si,[bx] загружает смещение этого значения - то есть в si будет храниться в лучшем случае 2N
mov ax,[si] опять загружает значение по адресу 2N
оператор [bx] загружает значение, хранящееся в памяти по адресу 2N - что там хранится неизвестно
lea si,[bx] загружает смещение этого значения - то есть в si будет храниться в лучшем случае 2N
mov ax,[si] опять загружает значение по адресу 2N
Похожие вопросы
- Рабочая ли это программа (Ассемблер)?
- Помогите доразбираться в фрагменте программы ассемблера.
- Изменение программы ассемблера.
- Почему на компонуется программа (Ассемблер)
- "a+b/a-c" нужно решить выражение, чтобы работало в ассемблере )
- "a+b/a-c"(дробь) нужно решить выражение, чтобы работало в ассемблере )
- Объясните как работает программа в паскаль!!!
- С++ cin cout. Не работает программа.
- С/С++ Неправильно работает программа
- Не работает программа на Cи