Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2017, 17:10   #1
Николай Н.
Новичок
Джуниор
 
Регистрация: 11.10.2017
Сообщений: 3
По умолчанию Как подкорректировать программу?

Вот написал программу, но с Ассемблером у меня беда. Плохо его понимаю.
Подкорректируйте пожалуйста если ошибки есть.
Задание
DB,DW,DD с одним операндом константой
32-разрядные данные и смещения в сегменте
Адресация операндов памяти. Индексная адресация со смещением (Val1[eax], Val1[edi],Val1[eex+4],[eax+6] etc.)
Машинные команды
Lahf
Dec reg
Cmp reg, mem
And mem,reg
Xor mem,imm
Jmp (относительная адресация), Где reg - 8 или 32-разрядные РЗП
mem - адрес операнда в памяти
imm - 8 или 32-разрядные непосредственные данные (константы)


Мой код

Код:
;.386
Data Segment
     datas db 'string'
     Datab db 123
     dataW dw 0001011100001101b
     n = 10
Data ends
 
Code Segment
assume cs:code, ds: data
 
Jum:
      Lahf
 
      Dec byte ptr [bx + 1]
      dec word ptr [bp +2]
      dec word ptr [bp]
 
      Mul al
      Mul ax
      Mul bh
      Mul bx
 
      Xor al, al
      Xor ax, ax
      mov bx, n
      n = 15
        mov bx, n
 
      Lea ax, [bx+1h]
 
      Jnbe Jend
 
      Adc word ptr dataS[si+2], ax
      Adc word ptr dataW[di+2], ax
adc dataw[di], 023a5H
adc daTaS[si+3], n
 
Mov ah, 200
Mov ax, 023deH
Jnbe Jum
 
Jend:
Code ends
 
end Jum
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 11.10.2017 в 17:15.
Николай Н. вне форума Ответить с цитированием
Старый 11.10.2017, 21:05   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Чего то мне не совсем понятно что сделать то нужно? демонстрация операций чтоли?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 11.10.2017, 22:47   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..судя по заданию - да!
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 12.10.2017, 12:54   #4
Николай Н.
Новичок
Джуниор
 
Регистрация: 11.10.2017
Сообщений: 3
По умолчанию

Можете подкорректировать, в соответствии с машинными командами?
Николай Н. вне форума Ответить с цитированием
Старый 12.10.2017, 13:45   #5
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..а что корректировать, если нету алгоритма и прога ничего не делает?
Если просто инструкции - то вроде всё правильно.
Насчёт маш\кодов - запусти отладчик 'DEBUG' и получишь все опкоды:
Код:
C:\debug
-a
139E:0100   lahf
139E:0101   dec  cx             ; Dec reg
139E:0102   cmp  ax,[500]       ; Cmp reg, mem
139E:0106   and  [100],dx       ; And mem,reg
139E:010A   xor  [200],bx       ; Xor mem,imm
139E:010E
-r
139E:0100   9F               LAHF
139E:0101   49               DEC     CX
139E:0102   3B 06 00 05      CMP     AX,[0500]      DS:0500=0000
139E:0106   21 16 00 01      AND     [0100],DX      DS:0100=499F
139E:010A   31 1E 00 02      XOR     [0200],BX      DS:0200=0000
            |         |
            +---------+-----> машинные команды
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 12.10.2017, 18:56   #6
Николай Н.
Новичок
Джуниор
 
Регистрация: 11.10.2017
Сообщений: 3
По умолчанию

Подскажите, а как у вас получилось в командной строке весь листинг получить? Я когда пишу D:\debug program.com -a появляется только строка 139E:0100

А как получить полностью листинг?
Николай Н. вне форума Ответить с цитированием
Старый 12.10.2017, 19:48   #7
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Откройте для себя Hiew: http://www.hiew.ru/indexr.html
Black Fregat вне форума Ответить с цитированием
Старый 13.10.2017, 03:43   #8
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Николай Н. Посмотреть сообщение
появляется только строка 139E:0100
..это ожидание ввода команд.
пишите свои инструкции, каждую подтверждая Enter-ом.
когда все команды введены, ещё раз Enter и потом "Т" - трассировка, которая покажет весь листринг (ненужное -регистры- я специально убрал).

А вообще DEBUG - это отстой и прошлый век! он не понимает большинство инструкций и работает только с 16-битными регистрами. из консольных\32-битных есть ещё GRDB - усовершенствованный дебуг: может ставить точки-останова, дружит с FPU, записывает действия в лог, и прочие навороты.

Во-всех консольных приложениях справка вызывается клавишей(?).
например у дебуга она такая:
Код:
-?
assemble     A [адрес]
compare      C диапазон адрес
dump         D [диапазон]
enter        E адрес [список]
fill         F диапазон список
go           G [=адрес] [адреса]
hex          H значение1 значение2
input        I порт
load         L [адрес] [диск] [превый_сектор] [число]
move         M диапазон адрес
name         N [путь] [список_аргументов]
output       O порт байт
proceed      P [=адрес] [число]
quit         Q
register     R [регистр]
search       S диапазон список
trace        T [=адрес] [значение]
unassemble   U [диапазон]
write        W [адрес] [диск] [первый_сектор] [число]
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подкорректировать программу,паскаль Карина Т_Т Помощь студентам 6 13.03.2014 22:43
подкорректировать программу lexa_7up Паскаль, Turbo Pascal, PascalABC.NET 9 24.12.2011 15:54
Необходимо подкорректировать программу на ассемблере!!! Иван1223 Помощь студентам 0 12.04.2011 19:59
Подкорректировать программу wrmarw Паскаль, Turbo Pascal, PascalABC.NET 5 04.05.2010 14:06
Можно ли подкорректировать программу, имея только ехе-шник? dmitriy777 Помощь студентам 5 22.02.2010 11:52