numout macro c
mov bx,c
xor ax,ax
mov ah,9h
mov dx,offset messageC
int 21h
mov cl,10h
m1:
sal bx,1
jc m2
mov ah,9h
mov dx,offset message0
int 21h
jmp m3
m2:
mov ah,9h
mov dx,offset message1
int 21h
m3:
loop m1
endm
count macro a,b
xor bx,bx
mov al,b
mov bl,2
mul bl
mov bl,a
add ax,bx
mov c,ax
endm
CSEG segment 'Code'
assume cs:CSEG,ds:CSEG,es:CSEG,ss:CSEG
org 100h
numin proc
mov ah,1
int 21h
sub al,30h
mov bl,al
shl bl,3
shl al,1
add bl,al
int 21h
sub al,30h
add bl,al
mov [bp+4],bl
ret
endp
main:
mov ah,9
mov dx,offset messageA
int 21h
xor ax,ax
;-------------Ввод A-------------------------
call numin ;addres
mov bl,[bp+4]
mov a,bl
;---------------Ввод B-------------------
xor ax,ax
mov ah,9
mov dx,offset messageB
int 21h
call numin
mov bl,[bp+4]
mov b,bl
;---------------C=A+B*2
count a,b
;----------------Проверка 3 бита
and ax,1000b
cmp ax,0h
jne gotoc
mov ax,c
mov bl,2
div bl
mov c,ax
gotoc:
;--------------Вывод С
numout c
;-----------------------Выход из СОМ-программы
int 20h
;-----------------------Данные
messageA db 'A= $'
messageB db 10,13,'B= $';10 - ASCII-код перехода на новую строку,13-ASCII-код возврата каретки
messageC db 10,13,'C=A+B*2= $'
message1 db '1$'
message0 db '0$'
a db 0
b db 0
c dw 0
;-----------------------
endp
end main
C = A + B*2
[FONT="Book Antiqua"][SIZE="1"]Пользователь вводит два числа А и В в десятичном виде. Программа должна:
1. Посчитать С=А+В*2.
2. Если третий бит числа С установлен, то вывести на экран С в двоичном виде, в противном случае, вывести на экран С/2 в двоичном виде.
3. Написать макрос для вывода результата
4. Написать процедуру для ввода чисел
5. Написать макрос для расчета
6. Передача параметров через стек
7. Используйте стандартные директивы сегментации и формат сом-программы. [/SIZE][/FONT]
Вот возникли следующие проблемы:
1. Не могу сделать передачу параметров через стек. Прошу помочь с этим.
2. При попытке создания сом-программы выдается ошибка Cannot generate COM file: data below initial CS:IP defined. Что это значит? В чем проблема, как исправить?
3. собственно, если знающие люди видят еще какую-то ошибку в программе, помогите и с ней.
Код:
1.Что именно не получается?Параметры в стек укладываются инструкцией [FONT="Courier New"]Push <Param>[/FONT],ложить можно только двойные/слова,байты–нет,НЯП
В подпрограмме параметры берутся по адресу [FONT="Courier New"][ESP+4+…][/FONT],где «…»–смещение i-го параметра от вершины стека(вернее,от адреса возврата–поэтому и +4).Смещения считайте сами.Если все параметры одного размера(слова,например),адрес будет вида [FONT="Courier New"][ESP+4+i*N][/FONT],где N–номер параметра
И вообще,то,что я сейчас изложил,в любой книге по ассемблеру
2.Вы текст переводили?Описание искали?Пробовали исправить?Вот если не получилось,то описываете свои действия,а уж мы поможем
3.Что-то влом,я концерт смотрю:)