Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler для начинающих

Войти
Регистрация
Восстановить пароль
 
biofan
0 / 0 / 0
Регистрация: 05.06.2014
Сообщений: 16
#1

Через стек по ссылке - Assembler

01.06.2015, 18:14. Просмотров 240. Ответов 2
Метки нет (Все метки)

Задание такое
Ввод x,y
Вывод x+y=100(Да/Нет)
Через стек по ссылке.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
extrn InputInt:near
extrn prg:near
begin segment ; Сегмент кода программы
assume cs:begin,ds:data,ss:komod
start:
    mov ax,data ; Настройка DS на начало сегмента данных
    mov ds,ax ; в ds записываем ах
call InputInt 
mov bx,ax
push bx; 1 загрузили
call InputInt 
push ax; 2 загрузили
push cx             ;помещаем сx в стек
    push dx             ;помещаем dx в стек
    push si             ;помещаем si в стек 
    CALL prg ;вызываем процедуру 
call InputInt 
int  21h
begin ends
 
data segment public ; Сегмент данных 
s db 6, 7 dup(?)
Msg1 db 13,10,'$'
Msg2 db 13,10,13,10,'$'
data ends
 
komod segment stack ; Сегмент стека 
    dw 256 dup (?) ; под стек отводится 128 слов 
Komod ends
end start
public InputInt
public prg
 
code segment
InputInt proc near
                         assume cs:code, ds:data
push bx  ; в десятичной системе счисления
push cx  ; в диапазоне0-65535 с консоли(клавиатуры). 
push dx  ; На выходе в регистреax 
push si  ; находится введенное число. 
 mov dx,offset strdsc   
mov ah,0Ah  
int 21h 
mov dl,0Ah 
mov ah,2 
int 21h 
xor ax,ax 
xor cx,cx 
mov cl,[strdsc+1] 
 mov si,offset strbuf 
mov bx,10 
s1: 
mul bx 
mov dl,[si] 
inc si 
sub dl,30h 
add ax,dx 
loop s1 
pop si 
pop dx 
pop cx 
pop bx 
ret 
InputInt endp
 
prg PROC near ;задаем значение near для процедуры
add bx,ax
cmp bx,64 ; в 16-ричной 
    jz met1 ;если равно,то переходим на Met1 
    mov ah,9 ;Функция 9 сервиса DOS:
    mov dx,offset Net ; вывод строки  
    int 21h ; вызываем прерывание
    ret ;выход
    met1:  
    mov ah,9 ;Функция 9 сервиса DOS:
    mov dx,offset Da ; вывод строки 
    int 21h ; вызываем прерывание
    ret ;выход
    prg endP ;процедура закончена
 
 
 code ends
 
data segment public 
strdsc db 6,0 
strbuf db 6 dup (?) 
DA db 'DA',13,10,'$'
    Net db 'NET',13,10,'$'
data ends 
end
Эта программа почему-то работает у меня в с 16-ными числами, т.е. ввожу 100, а переводит в 64. Как исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2015, 18:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Через стек по ссылке (Assembler):

Сделать через стек - Assembler
Программа которая находит n-член арифметической прогрессии. Вот она (проверьте на правильность) .MODEL SMALL .DATA a_X DW 2 ...

Передача параметров через стек - Assembler
Здравствуйте . Вот есть задача решить уравнение 2*d/3*c - 6*c*d , используя внешние процедуры. Передавать параметры нужно через стек ....

Передача параметров через стек - Assembler
Здравствуйте! Подскажите как можно переменную передать через стек в качестве параметров и как потом получить значение

Посчитать кубы по формуле через стек - Assembler
a3+b3-c3 (все числа в кубе)

Копирование одной строки в другую через стек - Assembler
Здравствуйте вы не могли бы мне помочь с реализацией небольшой программы, суть которой копирование 1 строки в другую через стек. CRLF...

Реализовать передачу параметров через стек по ссылки в подпрограмму - Assembler
Разобрался с сутью задания есть три модуля главный, подпрограмма ввода и вывода чисел в десятичной системе счисления, подпрограмма которая...

2
Ethereal
Нарушитель
4513 / 1372 / 183
Регистрация: 17.02.2013
Сообщений: 2,281
02.06.2015, 00:48 #2
Если ты вводишь 100, то на выходе из процедуры InputInt в ax именно 100 = 64h
1
biofan
0 / 0 / 0
Регистрация: 05.06.2014
Сообщений: 16
05.06.2015, 16:34  [ТС] #3
У меня ошибки в коде, а именно, передаю значение в некоторых местах не через стек по ссылке, можете пожалуйста исправить или хотя бы указать, на это и объяснить, как исправить

Добавлено через 6 часов 20 минут
Можно закрывать тему
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2015, 16:34
Привет! Вот еще темы с ответами:

Передача параметров через стек. Тип процедуры – ближний - Assembler
Всем привет! Есть задание: Ввести 8-битовое целое число А. Если оно четное, вычислить значение выражения А3 – 1, если нечетное – значение...

Внешняя процедура, выполняющая сложение двух чисел (передача параметров через стек) - Assembler
Помогите, пожалуйста!!!! Написать прорамму с внешней процедурой, выполняющую сложение 2 чисел с передачей параметров процедуры через стэк.

Составьте процедуру sоrt, которой через стек передаются адреса двух однобайтных двоичных чисел - Assembler
Составьте процедуру sоrt, которой через стек передаются адресадвух однобайтных двоичных чисел. Подпрограмма сравнивает числа и меняет их...

печать строки. передача строки через стек - Assembler
c1 segment assume cs:c1, ds:c1, ss:c1 org 100h start: jmp setup prg proc pop dx mov ah,9


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru