Лидеры рейтинга
Мастер-Эксперт
945
Мастер-Эксперт
511
Академик
353
Мастер-Эксперт
311
Профессионал
191
Профессор
71
Профессор
53
8.1.6
02.01.2021
JS: 2.2.2
CSS: 4.2.0
jQuery: 3.5.1
Создание программ на языке Assembler.
Администратор раздела: Зенченко Константин Николаевич (Старший модератор)
|
Перейти к консультации №: |
|
Здравствуйте! С Assembler знаком всего 3 дня) подскажите как записать формулу в код
;Program_4 – Арифметические операции, вариант … Data SEGMENT ;Открыть сегмент данных A DB 5Ah ;Инициализировать B DB 55h ;переменные A, B, C, D, X C DB 11h D DB 5 X DW ? Data ENDS ;Закрыть сегмент данных Ourstack SEGMENT Stack ;Открыть сегмент стека DB 100h DUP (?) ;Отвести под стек 256 байт Ourstack ENDS ;Закрыть сегмент стека ASSUME CS:Code, DS:Data, SS:Ourstack ;Назначить сегментные ;регистры Code SEGMENT ;Открыть сегмент кодов Start: mov AX, Data ;Инициализировать mov DS, AX ;сегментный регистр DS xor AX, AX ;Очистить регистр AX Здесь должны быть команды вычисления арифметического выражения movAX, 4C00h ;Завершить программу int 21h ;с помощью DOS Code ENDS ;Закрыть сегмент кодов END Start ;Конец исходного модуля.
-----
Прикрепленное изображение (кликните по картинке для увеличения):
Состояние: Консультация закрыта
Здравствуйте, Александр!
Смотрите код:
model tiny .code org 100h begin: mov ax,A mov bx,3 mul bx add ax,48 mov bx,C mul bx push ax mov ax,B mov cx,D mul cx pop cx sub cx,ax mov ax,cx xor dx,dx div bx push dx mov si,10 xor cx,cx @@01: xor dx,dx div si push dx inc cx or ax,ax jnz @@01 @@02: pop ax or al,'0' int 29h loop @@02 @@03: pop dx or dx,dx jz @@05 push dx mov al,'.' int 29h @@04: pop ax or ax,ax jz @@05 xor dx,dx mul si div bx push dx or al,'0' int 29h inc cx cmp cx,30; jnz @@04 pop dx @@05: xor ax,ax int 16h ret A dw 5Ah B dw 55h C dw 11h D dw 5 end begin
|
Консультировал: Зенченко Константин Николаевич (Старший модератор) Дата отправки: 30.11.2020, 12:36 |
Рейтинг ответа:
0 Сообщение модераторам Отправлять сообщения |
Зенченко Константин Николаевич
Старший модератор ID: 31795
0
|
Александр: FPU или целые числа? ===== |
Посетитель ID: 404521
0
|
FPU |
Зенченко Константин Николаевич
Старший модератор ID: 31795
0
|
Александр: Цитата: Александр всего 3 дня Цитата: Александр FPU неверю ![]() ===== |
Посетитель ID: 404521
0
|
блин, стеб вообще не понял. Ты разве не знаешь наши шараги? Сказали сделать, как сделать, что куда не объясняют, не сделал 2. |
Зенченко Константин Николаевич
Старший модератор ID: 31795
+1
|
Александр: В следующем своем вопросе Вы используете целочисельную арифметику, а не FPU. Код :: выделить код model tiny .code org 100h begin: mov ax,A mov bx,3 mul bx add ax,48 mov bx,C mul bx push ax mov ax,B mov cx,D mul cx pop cx sub cx,ax mov ax,cx xor dx,dx div bx push dx mov si,10 xor cx,cx @@01: xor dx,dx div si push dx inc cx or ax,ax jnz @@01 @@02: pop ax or al,'0' int 29h loop @@02 @@03: pop dx or dx,dx jz @@05 push dx mov al,'.' int 29h @@04: pop ax or ax,ax jz @@05 xor dx,dx mul si div bx push dx or al,'0' int 29h inc cx cmp cx,30; jnz @@04 pop dx @@05: xor ax,ax int 16h ret A dw 10 B dw 20 C dw 30 D dw 40 end begin ----- ===== |
Зенченко Константин Николаевич
Старший модератор ID: 31795
0
|
Александр: Ваш дубль удаляю. ===== |
Посетитель ID: 404521
0
|
Код :: выделить код ;Program_4 – Арифметические операции, вариант … Data SEGMENT ;Открыть сегмент данных A DB 5Ah ;Инициализировать B DB 55h ;переменные A, B, C, D, X C DB 11h D DB 5 X DW ? Data ENDS ;Закрыть сегмент данных Ourstack SEGMENT Stack ;Открыть сегмент стека DB 100h DUP (?) ;Отвести под стек 256 байт Ourstack ENDS ;Закрыть сегмент стека ASSUME CS:Code, DS:Data, SS:Ourstack ;Назначить сегментные ;регистры Code SEGMENT ;Открыть сегмент кодов Start: mov AX, Data ;Инициализировать mov DS, AX ;сегментный регистр DS xor AX, AX ;Очистить регистр AX model tiny .code org 100h begin: mov ax,A mov bx,3 mul bx add ax,48 mov bx,C mul bx push ax mov ax,B mov cx,D mul cx pop cx sub cx,ax mov ax,cx xor dx,dx div bx push dx mov si,10 xor cx,cx @@01: xor dx,dx div si push dx inc cx or ax,ax jnz @@01 @@02: pop ax or al,'0' int 29h loop @@02 @@03: pop dx or dx,dx jz @@05 push dx mov al,'.' int 29h @@04: pop ax or ax,ax jz @@05 xor dx,dx mul si div bx push dx or al,'0' int 29h inc cx cmp cx,30; jnz @@04 pop dx @@05: xor ax,ax int 16h ret A dw 5Ah B dw 55h C dw 11h D dw 5 end begin movAX, 4C00h ;Завершить программу int 21h ;с помощью DOS Code ENDS ;Закрыть сегмент кодов END Start ;Конец исходного модуля. ----- |
Зенченко Константин Николаевич
Старший модератор ID: 31795
0
|
Александр: Цитата: Александр model tiny Все что выше этого уберите, оставьте так как в моем ответе Если Вам нужен код MODEL SMALL, то могу переделать. ===== |
Посетитель ID: 404521
0
|
Код :: выделить код ;prog_4.asm Арифметические операции Data SEGMENT ; Открыть сегмент данных A DB 15 ;Инициализировать B DW 150h ;переменные A, B, C, D, X C DW 5 D DW 4 X DW ? Data ENDS ;Закрыть сегмент данных Ourstack SEGMENT Stack ;Открыть сегмент стека DB 100h DUP (?) ;Отвести под стек 256 байт Ourstack ENDS ;Закрыть сегмент стека ASSUME CS:Code, DS:Data, SS:Ourstack ;Назначить сегментные ;регистры Code SEGMENT ;Открыть сегмент кодов Start: mov AX, Data ;Инициализировать (1) mov DS, AX ;сегментный регистр DS (2) xor AX, AX ;очистить регистр AX (3) ;=====команды вычисления арифметического выражения=========== mov AL,A ;AL:= (A) (4) mul A ;AX:=A*A (5) add AX, D ;AX:=(AX) + (D) (6) cwd ;преобразовать (АХ) в двойное слово (7) mov BX, C ;BX:= (C) (8) sub BX,B ;BX:=(BX)-(B) (9) idiv BX ;делить (DX:AX) на (BX) (10) ;частное в AX, остаток в DX mov AX, 4C00h ;Завершить программу (11) int 21h ;с помощью DOS (12) Code ENDS ;Закрыть сегмент кодов END Start ;Конец исходного модуля. надо вот так ток с моим вариантом |
Зенченко Константин Николаевич
Старший модератор ID: 31795
0
|
Александр: Цитата: Александр надо вот так ток с моим вариантом Код :: выделить код ; ;model tiny model small .code ; ;org 100h begin: mov ax,@data mov ds,ax ; mov ax,A mul ax add ax,D cwd mov bx,C sub bx,B ; ; idiv bx push dx or dx,ax test dx,8000h jz @@00 push ax mov al,'-' int 29h pop ax @@00: neg ax js @@00 mov si,10 xor cx,cx @@01: xor dx,dx div si push dx inc cx or ax,ax jnz @@01 @@02: pop ax or al,'0' int 29h loop @@02 @@03: pop dx @@000: neg dx js @@000 or dx,dx jz @@05 push dx mov al,'.' int 29h @@04: pop ax or ax,ax jz @@05 xor dx,dx mul si div bx push dx or al,'0' int 29h inc cx cmp cx,30; jnz @@04 pop dx @@05: xor ax,ax int 16h ; mov ax,4C00h int 21h ; .data A dw 15 B dw 150h C dw 5h D dw 4 ; .stack 256 end begin Забудьте segment старое определение сегмента. Код :: выделить код Data SEGMENT Это сокращенная форма записи сегмента. Код :: выделить код Ourstack SEGMENT Stack Тоже сокращенная запись, только она неверная. Стек всегда пишется полной формой, иначе компилятор будет ругаться на отсутсвие стека. Код :: выделить код Ourstack SEGMENT Stack 'Stack' Используйте упрощенную запись model - .code - .data - .stack Компилятор эти макросы подменяет полной формой определение сегмента, при этом избавляет Вас от assume ===== |
Посетитель ID: 404521
0
|
спасибо Александр, завтра попробую сдать |
Зенченко Константин Николаевич
Старший модератор ID: 31795
0
|
Александр: Цитата: Александр спасибо Александр, Я Костя ![]() ===== |
Посетитель ID: 400728
+1
|
Зенченко Константин Николаевич: Цитата: Зенченко Константин Николаевич Я Костя ![]() |
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.