model small
.stack 100h
.data
buf db 10, ?, 5 dup(' ')
outbuf db 3 dup(30h)
ten db ?
result dw 0
virable_a db 0
virable_b db 0
virable_c db 0
virable_d db 0
soxr_rez db 0
; неверный формат данных
message db 0ah,0dh,"*ҐўҐа*л© д®а¬ в ¤ **ле","$"
; введите значение переменных
message_1 db 0ah,0dh,"ўўҐ¤ЁвҐ §* зҐ*Ёп ЇҐаҐ¬Ґ**ле ¤«п д®а¬г«л (Ђ+B)*C/D ў д®а¬ ⥠a=<§* зҐ*ЁҐ>/b=<§* зҐ*ЁҐ>/c=<§* зҐ*ЁҐ>/d=<§* зҐ*ЁҐ>,ЇаЁзс¬ Ї®б«Ґ¤®ў ⥫м*®бвм ўў®¤ ¬®¦Ґв Ўлвм «оЎ®©","$"
; деление на ноль
message_2 db 0ah,0dh,"¤Ґ«Ґ*ЁҐ * *®«м","$"
; результат равен
message_3 db 0ah,0dh,"१г«мв в а ўҐ* = ","$"
.code
begin:
mov ax,@data ; связываем регистр DX с сегментом
mov ds,ax ; данных через регистр AX
jmp main
;************************************
;процедура сдвига переход коретки
;************************************
shift proc
mov dl,10
mov ah,2
int 21h
ret
shift endp
;*******************************************************
;процедура вывода на экран переменной, которую в данный
;момент требуется ввести
;*******************************************************
Read proc
mov ah,2 ;выбор прерывания на вывод символа
int 21h ;прерывание
mov dl,'=' ;заносим байтовый регистр dl значение символа '='
mov ah,2
int 21h
call ReadLN ;переход с возвратотм к функции ввода числа
call shift
ret
Read endp
;****************************************
; вывод сообщения если не верный формат данных
; переход к приглашению ввести всё по новой
;****************************************
error_message proc
mov ah,09h
lea dx,message
int 21h
jmp main
ret
error_message endp
;*************************************
;;функция ввода числа
;*************************************
ReadLN proc
mov ten,10 ;делитель для преобразования строки в число
lea dx,buf ;заносим адрес буфера под число в ax
mov al,0ah ;вызываемая DOS-овская процедура после очистки буфера ввода
mov ah,0ch ;выбор прерывания отчистки буфера ввода
int 21h ;вызов прерывания
mov si,1
mov al,buf[si] ;занесение в АL количества введенных символов
mov cl,al ;установка счетчика цикла
mov ch,0 ;обнуляем верхний байт счетчика
mov ax,0 ;обнуляем AX
jcxz ml2 ;переход "если CX = 0"
asd:
mul ten ;умножение содержимого AX на 10
inc si ;инкремента модификатора SI
mov dl,buf[si] ;записываем значение символа из буфера в DL
sub dl,30h ;вычитаем из него значение нуля, получаем цифру
add al,dl ;прибавляем цифру к АL (результат преобразования)
jc error_message ;в случае переноса - ошибка и выход и программы
loop asd ;цикл
mov soxr_rez,al ; временное сохранение рузультата в регистре АL
ml2:
ret ;возвращение из подпрограммы
ReadLN endp
;******************************
; процедура выхода по ошибке
;******************************
error proc ;метка ошибки - вызывает прерывание завершения программы
mov al,1 ;с кодом ошибки 1
mov ah,4ch
int 21h
ret
error endp
;*******************************************
;деление на ноль выход и программы процедура
;********************************************
error_message1 proc
mov ah,09h
lea dx,message_2
int 21h
jmp error
ret
error_message1 endp
;***************************
;процедура вычисления
;***************************
Calculation_main proc
cmp virable_d,0; если D = 0 то ошибка выйдим из программы
int 21h
jz error_message1 ;собственно переход к ошибке и выход из проргаммы
; первым действием надо сложить А и В и записать результат в BX
mov al, virable_a ;заносим в AL переменную А
add al, virable_b
jnc m1 ; переход если нет переполнения
mov ah,0
adc ah,0
jmp r1 ; переход дальше для вычисления
m1:
mov ah,0
r1:
div virable_d
mov ah,0
mov bl,al
xor ax,ax
mov al,bl
mul virable_c
mov result,ax
ret ;возврат
Calculation_main endp
;********************************************
; процедура вывода числа
;(перевод в 10 и вывод на экран)
;********************************************
WriteLN Proc ;AX - выводимое число
mov ah,09h
lea dx,message_3
int 21h
xor ax,ax
mov ax,result
xor cx,cx
mov bx,10
x:
xor dx,dx
div bx
add dl,'0'
push dx
inc cx
cmp ax,0
jne x
x2:
pop dx
mov ah,2
int 21h
loop x2
ret
WriteLN EndP
;*************************************************
;главная процедура с которой начинаем работу
; она сразу же начинает своё выполнение
;*************************************************
main proc
mov ah,09h
lea dx,message_1
int 21h
call shift
mov al,0 ;прерывание завершения
mov ah,4ch
int 21h
ret
main endp
end begin
получение значений переменных из командной строки (assembler)
в ассемблере почти ничего не шарю и вот задача стоит надо ввести с командной строки 4 переменные и их значения в любом порядке и вычислить по формуле, написал процедуры перевода из 10 в 16 с.с., вычисления по формуле осталось тока разработать процедуру для работы с цепочкой, что бы взять вот из этой строки с:\lab21.exe /a=3/b=4/c=5/d=2 значения переменных и присвоить своим переменным и передать эти переменные в функцию вычисления помогите вот код(плоховат но как умею))))