5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
1

Сложение и вычитание чисел

17.10.2011, 21:29. Показов 8784. Ответов 14
Метки нет (Все метки)

Добрый вечер!
вот мой код программы:
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
 .386               
    .MODEL flat,stdcall
    
    .STACK 100h
    ExitProcess PROTO, dwExitCode:DWORD 
    DumpRegs PROTO
    
    .data
    varA dw 5
    varB dw 2
    varC dw 0
    
    .code
    main PROC       
       call ADD1
       call SUB2
       call DumpRegs
       ret 
    main ENDP
    
    ADD1 PROC
       mov ax,varA
       mov bx,varB  
       add AL,BL 
       ret
    ADD1 ENDP
    
    SUB2 PROC
       mov ax,varA
       mov bx,varB  
       sub AL,BL 
       ret
    SUB2 ENDP
        
    INVOKE ExitProcess,0
      
END main
сначала компилирую
ml /c proga.asm

потом нужно линковать, набираю
doslink /t proga.obj
пробовала и без /t
doslink proga.obj
пишет, что doslink не является внутренней или внешней командой, исполняемой программой или пакетным файлом

как нужно правильно сделать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2011, 21:29
Ответы с готовыми решениями:

Сложение и вычитание упакованных чисел
Здравствуйте,нужно сделать две программы на Assembler TASM.Задание в первой программе сложить два...

Сложение и вычитание чисел с плавающей точкой
Доброго времени суток. Прошу помочь. Нужно где-то откопать програмку: "Сложение и вычитание чисел...

Многобайтное сложение и вычитание целых чисел
Помогите с заданием пожалуйста... Составьте программу, выполняющую многобайтное сложение и...

Многобайтовое сложение и вычитание целых чисел
Составьте программу, выполняющую многобайтовое сложение и вычитание целых чисел Сложение...

14
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
17.10.2011, 21:59 2
link /subsystem:windows proga.obj
1
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
17.10.2011, 22:14  [ТС] 3
Цитата Сообщение от Vadimych Посмотреть сообщение
link /subsystem:windows proga.obj
спасибо, все получилось
только теперь мне выдало кучу ошибок
http://www.imagepost.ru/?v=error_16.png

в коде:
в 24 и 31 строчках исправила:
Assembler
1
2
  add ax,bx 
       sub ax,bx
0
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
17.10.2011, 22:26 4
Koketka, чтобы использовать функции системы надо подключить файлы с описанием их прототипов и библиотечные файлы. В пакете масм32 они лежат в папках include и lib. И компилировать ml /c /coff proga.asm
1
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
17.10.2011, 23:02  [ТС] 5
Цитата Сообщение от Vadimych Посмотреть сообщение
Koketka, чтобы использовать функции системы надо подключить файлы с описанием их прототипов и библиотечные файлы. В пакете масм32 они лежат в папках include и lib.
INCLUDE ***.* в начале кода?

Добавлено через 2 минуты
Цитата Сообщение от Vadimych Посмотреть сообщение
KoketkaИ компилировать ml /c /coff proga.asm
а что значит coff?

Добавлено через 6 минут
ExitProcess - эта завершает выполнение процесса
DumpRegs - позволяет вывести на экран содержимое регистров
про эти функции я в книжке прочитала
и там не сказано что нужно что-то дополнительно подключать
в папках lib include я таких не нашла
и как мне быть?
0
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
17.10.2011, 23:15 6
stack 100h -не надо, у Вас модель памяти не такая. Раз прототипы в программе описаны, то инклюды не нужны, но либы - нужны. includelib \masm32\lib\kernel32.lib.

Добавлено через 4 минуты
Вот в таком виде собирается, что такое DumpRegs, в MSDN не нашёл.

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
.386               
    .MODEL flat,stdcall
    
includelib     \masm32\lib\kernel32.lib
    ExitProcess PROTO, dwExitCode:DWORD 
    ;DumpRegs PROTO
    .data
    varA dw 5
    varB dw 2
    varC dw 0
    
    .code
    main PROC       
       call ADD1
       call SUB2
      ; call DumpRegs
       ret 
    main ENDP
    
    ADD1 PROC
       mov ax,varA
       mov bx,varB  
       add AL,BL 
       ret
    ADD1 ENDP
    
    SUB2 PROC
       mov ax,varA
       mov bx,varB  
       sub AL,BL 
       ret
    SUB2 ENDP
        
    INVOKE ExitProcess,0
      
END main
1
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
17.10.2011, 23:48  [ТС] 7
Добрый вечер!
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.model small
.stack 100h
.data
   varA dw 5
   varB dw 2
   varC dw 0
.code
start:
     mov ax,varA
     mov bx,varB  
     add ax,bx
  
     mov ax,varA
     mov bx,varB  
     sub ax,bx 
     ret
end start
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
    .386               
    .MODEL flat,stdcall
    
    .STACK 100h
    ExitProcess PROTO, dwExitCode:DWORD 
    DumpRegs PROTO
    
    .data
    varA dw 5
    varB dw 2
    varC dw 0
    
    .code
    main PROC       
       call ADD1
       call SUB2
       call DumpRegs
       ret 
    main ENDP
    
    ADD1 PROC
       mov ax,varA
       mov bx,varB  
       add ax,bx 
       ret
    ADD1 ENDP
    
    SUB2 PROC
       mov ax,varA
       mov bx,varB  
       sub ax,bx 
       ret
    SUB2 ENDP
        
    INVOKE ExitProcess,0
      
END main
ни то ни другое не работает
компилирует без ошибок
и как результат на экран вывести?
и создать exe файл?

Добавлено через 19 минут
ml /c proga.asm
link /subsystem:windows proga.obj

а код у меня верно написан?

Добавлено через 1 час 26 минут
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
.386               
    .MODEL flat,stdcall
    
     includelib     \masm32\lib\kernel32.lib
    ExitProcess PROTO, dwExitCode:DWORD 
    DumpRegs PROTO
 
    .data
    varA dw 5
    varB dw 2
    varC dw 0
    
    .code
    main PROC       
       call ADD1
       call SUB2
      ; call DumpRegs
       ret 
    main ENDP
    
    ADD1 PROC
       mov ax,varA
       mov bx,varB  
       add ax,bx 
       ret
    ADD1 ENDP
    
    SUB2 PROC
       mov ax,varA
       mov bx,varB  
       sub ax,bx 
       ret
    SUB2 ENDP
        
    INVOKE ExitProcess,0
      
END main
вот, только теперь он не знает что такое DumpRegs
по ходу дела тут нужно подключить инклуд Irvine32.inc, но у меня такого файлика нет в папках lib и include, и выдает что такого нет
что мне сделать?или как мне заменить DumpRegs?как вывести на экран?
0
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
17.10.2011, 23:58  [ТС] 8
а чем можно заменить DumpRegs?

Добавлено через 12 минут
а еще нашла что DumpRegs это в инклуде Irvine32.inc, но у меня такого файлика нет в папках lib и include

ну или вообще как мне вывести на экран то что у меня получилось?

Добавлено через 26 минут
вот отсюда скачала http://wasm.ru/forum/viewtopic.php?pid=253542
Irvin32.lib но все равно не работает
0
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
18.10.2011, 00:16 9
wsprintf переводит число в строку. Только не забывайте, что параметры, передаваемые в функцию, должны быть dword`ми. Если Ваше число - слово, обнулите старшую часть регистра с результатом.
Вот в таком роде:

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
.386               
    .MODEL flat,stdcall
    ;option casemap:none
    
includelib     \masm32\lib\kernel32.lib
includelib     \masm32\lib\user32.lib
    ExitProcess PROTO, dwExitCode:DWORD 
    MessageBoxA PROTO :dword,:dword,:dword,:dword
     wsprintfA PROTO  c :vararg
 
    .data
    varA dw 5
    varB dw 2
    varC dw 0
    fmt db '%u',0
    buffer db 10 dup (0) 
    
    .code
    main PROC       
       call ADD1
       call SUB2
and eax,0ffffh
invoke wsprintfA,offset buffer,offset fmt,eax
add esp,12
 
invoke MessageBoxA,0,addr buffer,0,0
    INVOKE ExitProcess,0
 
    main ENDP
    
    ADD1 PROC
       mov ax,varA
       mov bx,varB  
       add AL,BL 
       ret
    ADD1 ENDP
    
    SUB2 PROC
       mov ax,varA
       mov bx,varB  
       sub AL,BL 
       ret
    SUB2 ENDP
        
      
END main
1
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
18.10.2011, 00:21  [ТС] 10
переделала так:
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
.386               
    .MODEL flat,stdcall
 
    includelib     c:\masm32\lib\kernel32.lib
    ExitProcess PROTO, dwExitCode:DWORD 
 
    .data
    varA dw 5
    varB dw 2
    varC dw 0
    
    .code
    main PROC       
       call ADD1
       call SUB2
        ret 
    main ENDP
    
    ADD1 PROC
       mov ax,varA
       mov bx,varB  
       add ax,bx 
       mov varC, ax
       mov ah, 4ch
       int 21h
    ADD1 ENDP
    
    SUB2 PROC
       mov ax,varA
       mov bx,varB  
       sub ax,bx 
       mov varC, ax
       mov ah, 4ch
       int 21h
    SUB2 ENDP
        
    INVOKE ExitProcess,0
      
END main
при запуске программы пусто, что не так?как мне вывести результат подскажите пожалуйста?
0
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
18.10.2011, 00:25 11
Koketka, я же дал рабочий код. Вы виндовс с досом мешаете.
0
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
18.10.2011, 00:55  [ТС] 12
Цитата Сообщение от Vadimych Посмотреть сообщение
Koketka, я же дал рабочий код. Вы виндовс с досом мешаете.
это я написала пока то ваше сообщение еще не видела

Добавлено через 3 минуты
а можно у вас еще спросить про строчки которые вы добавили
wsprintfA PROTO c :vararg

fmt db '%u',0

and eax,0ffffh
invoke wsprintfA,offset buffer,offset fmt,eax
add esp,12

invoke MessageBoxA,0,addr buffer,0,0

Добавлено через 23 минуты
а еще мне нужно слоижть и вычесть числа используя память, не подскажите что нужно изменить?
0
Ушел с форума
Автор FAQ
15554 / 7372 / 978
Регистрация: 11.11.2010
Сообщений: 13,312
18.10.2011, 04:37 13
Koketka, здесь Irvin32.inc, Irvin32.lib, SmallWin.inc, VirtualKeys.inc в одном флаконе
А вообще-то не очень сложно найти в инете книгу
Кип Р. Ирвин "Язык ассемблера для процессоров Intel" и почитать ее, куча вопросов сразу бы отпала
Изображения
 
0
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
18.10.2011, 08:37 14
proto c :vararg говорит компилятору о том, что функция принимает произвольное число аргументов. После вызова такой функции надо чистить стек вручную. Хотя при использовании макроса invoke компилятор сам вставляет нужный код:add esp (количество аргументов)*4.
fmt - формат преобразования числа в символьный вид.

Добавлено через 16 минут
Да, число же может быть отрицательным, тогда fmt db '%d',0. И movsx eax,ax перед вызовом wsprintf чтобы расширить знак на весь регистр. Вычесть/сложить используя память
Assembler
1
2
3
mov ax,varA
add ax,varB
sub ax,varC
1
Клюг
7673 / 3188 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
18.10.2011, 12:52 15
Цитата Сообщение от Koketka
это в инклуде Irvine32.inc
Он же ниже по вашей сылке: Irvine32.inc SmallWin.inc
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2011, 12:52
Помогаю со студенческими работами здесь

Ассемблер. Сложение шестнадцатиричных чисел\вычитание двоичных
Program RaznostMassivov; const N=7; var a1:array of longint; a2:array of longint; ...

Составьте программу, выполняющую многобайтовое сложение и вычитание целых чисел
Составьте программу, выполняющую многобайтовое сложение и вычитание целых чисел A+B A-B...

Помогите решить задачу задача;сложение,вычитание,умножение,деление чисел в разных форматах
задача;сложение,вычитание,умножение,деление чисел в разных форматах

Ассемблер в паскале: как загрузить массив во встроенный ассемблер и произвести над любым из его чисел сложение(вычитание).
хочу написать программу в паскале с использованием встроенного ассемблера, но прежде чем начать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru