Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: MERCURY127
Дата сообщения: 19.10.2012 15:40
это вероятно, один из сообщества микроконтроллерных сектантов
Автор: akaGM
Дата сообщения: 19.10.2012 16:20
а я вот несколько похожих кодов под Лин встречал, подо что же они были?
под ПоверРС что ли?

Добавлено:

а может это Альфа?
Автор: Nastya19kiss
Дата сообщения: 19.10.2012 18:50
Данный код написан на языке программирования asm51
Автор: ne_viens
Дата сообщения: 19.10.2012 21:02
Числа с знаком суммируются примерно также, только:
1. Перенос определяется по OV флагу а не C
2. Если резултат положительный- переносим, если отрицательный- занимаем
3. Меняем знак результата на противоположный

Примерно так:

Код:
org 0

mov R0, #39h
mov 20h, 0     ;var20h is bit addressable
clr R1
L1:
mov A, @R0
add A, 20h
mov 20h, A
jnb w.2, L4 ;overflow?

jnb 07h, L2 ;yes, check sign bit of var20h

dec R1 ;is negative
sjmp L3

L2:
inc R1 ;is positive
L3:
cpl 07h ;complement sign bit of var20h
L4:
inc R0
cjne R0, #41h, L1

END
Автор: ne_viens
Дата сообщения: 20.10.2012 16:55
Предыдущий пост игнорировать.

Код:
ORG 0
;------------------- init
    mov 39h, #-127
    mov 3ah, #127
    mov 3bh, #-13
    mov 3ch, #-80
    mov 3dh, #14
    mov 3eh, #-28    
    mov 3fh, #-1
    mov 40h, #-127
    
    mov R0, #39h
    mov R4, #0
    mov R5, #0
;------------------- fetch
L1:
    mov A, @R0
;------------------- extend sign
    jnb 0e7h, L2    ;test bit 7 of A
    
    mov B, #0ffh    ;"-" sign extend
    sjmp L3

L2:
    mov B, #0        ;"+" sign extend
L3:
;------------------- short add
    add A, R4
    mov R4, A
    mov A, B
    addc A, R5
    mov R5, A
;------------------- next
    inc R0
    cjne R0, #41h, L1

    nop
END

Автор: Nastya19kiss
Дата сообщения: 21.10.2012 09:33
Я уже доделала. Спасибо большое!!!

Добавлено:
Мне еще сортировку нужно сделать. Чет не могу сообразить пока
Автор: ne_viens
Дата сообщения: 21.10.2012 17:17
Есть готовые алгоритмы сортировки (bubble sort, quick sort, insertion sort, итд итд). Просто надо перенести на 8051. Буббле сорт засмеют, квиксорт нереализуем с данной глубиной стека, сортировка с вставлением будет в самый раз:

Код:
ORG 0
mov 38h, #00h ;a NULL byte before begin of array is required

mov 39h, #77h ;an array
mov 3ah, #44h
mov 3bh, #00h
mov 3ch, #66h
mov 3dh, #55h
mov 3eh, #22h
mov 3fh, #33h
mov 40h, #11h

mov R3, #0 ;insertion sort begins here
L1:
mov A, R3
add A, #39h
mov R0, A
mov A, R3
add A, #38h
mov R1, A
mov R2, 3
mov A, @R0
L2:
mov 4, @R1
cjne A, 4, L3
sjmp L4

L3:
jnc L4

mov 4, @R1
mov @R0, 4
dec R1
dec R0
djnz R2, L2

L4:
mov @R0, A
inc R3
cjne R3, #8, L1 ;array length = 8

nop
END
Автор: Nastya19kiss
Дата сообщения: 21.10.2012 17:31
можно вопрос....немного не понятна строчка mov 4,@R1. что значит 4?
Автор: ne_viens
Дата сообщения: 21.10.2012 17:43
Четвёртая ячейка памяти (или R4). B данном случае temp переменная.
Автор: Nastya19kiss
Дата сообщения: 21.10.2012 18:47
Спасибо огромное. Я нашла пару примеров, твой более понятный
Автор: bomzzz
Дата сообщения: 23.10.2012 18:17
\MASM32\BIN\EDITBIN.EXE /LARGEADDRESSAWARE Project.exe

никто не знает случайно как это правильно использовать в МАСМ32?

http://ntcore.com/4gb_patch.php - вот эта фигня вроде работает
Автор: ne_viens
Дата сообщения: 24.10.2012 13:45
;echo off
;goto make
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

.code
start:

invoke VirtualAlloc, 0, 70000000h, MEM_COMMIT, PAGE_READWRITE
or eax, eax
je @F

invoke VirtualFree, eax, 0, MEM_RELEASE
@@:
invoke ExitProcess, 0

END start
;#######################################
:make

if exist test.obj del test.obj
if exist test.exe del test.exe

\masm32\bin\ml /c /coff test.bat
\masm32\bin\link /LARGEADDRESSAWARE /SUBSYSTEM:WINDOWS test.obj

if exist test.obj del test.obj
dir test.*
pause
Автор: akaGM
Дата сообщения: 24.10.2012 14:14
ne_viens

ml /c /coff test.bat
:)
кстати, почему бат?


je @F

а это куда отскок?
Автор: ne_viens
Дата сообщения: 24.10.2012 14:25
Чтоб "C:\MASM32\bin\bldall.bat" не править.

je @F прыгает к последующему @@: , @B - к предыдущему. Это удобно, если код программы линеарный без JMP макаронов.
Автор: bomzzz
Дата сообщения: 24.10.2012 14:54
это удобно чтоб не выдумывать постоянно говорящие имена переходам

ne_viens
сенки. вот еще более крутая прога в частности умеющая патчить екзешники для /3G ключа
http://ntcore.com/exsuite.php
Автор: akaGM
Дата сообщения: 24.10.2012 14:56
ясно...

ml /coff

а масм дефолтом теперь OMF генерит что ли?
Автор: bomzzz
Дата сообщения: 24.10.2012 15:07
ne_viens
70000000h - а что эти загадочные письмена доказывают, зачем выделять 1792 мб?

akaGM

Цитата:
кстати, почему бат?

http://wasm.ru/article.php?article=drvw2k03
Автор: ne_viens
Дата сообщения: 24.10.2012 15:27
>akaGM
Незнаю, я с ctrl-c, ctrl-v из bldall.bat взял. Он там уже лет 10 лежит

>bomzzz
70000000h- это максимальный кусок памяти, который разом можно выделить.

Нет смысла патчить готовые проги на /LARGEADDRESSAWARE , если код эту всю память не сможет заюзать. Вот если сам пишешь, например:

Код:
mov ebx, 70000000h
invoke VirtualAlloc, 0, ebx, MEM_COMMIT, PAGE_READWRITE
mov edi, eax
mov ecx, ebx
shr ecx, 2
xor eax, eax
rep stosd

mov ebx, 60000000h
invoke VirtualAlloc, 0, ebx, MEM_COMMIT, PAGE_READWRITE
mov edi, eax
mov ecx, ebx
shr ecx, 2
xor eax, eax
rep stosd
Автор: akaGM
Дата сообщения: 24.10.2012 15:37
ne_viens
мелкие сами в своём компиляторе не уверены :)

bomzzz
ясно...
Автор: ne_viens
Дата сообщения: 24.10.2012 15:52
MASM32 детище hutch'a.
Он взял MASM и добавил туда *.inc, *.lib, примитивную среду разработки (qeditor), примеры и ещё кучку мелочи.
Программирование я именно с масма начал изучать.
Автор: akaGM
Дата сообщения: 24.10.2012 15:59
я не понял, masm32 это не М$ masm?
Автор: ne_viens
Дата сообщения: 24.10.2012 16:02
M$ MASM- это ml.exe + link.exe
MASM32- среда разработки, на которой можно полноценные проги писать.
Автор: akaGM
Дата сообщения: 24.10.2012 16:12

Цитата:
MASM32- среда разработки, на которой можно полноценные проги писать

а на масме неполноценные? :)

в смысле у этого чуда своя ИДЕ?
Автор: bomzzz
Дата сообщения: 24.10.2012 16:33

Цитата:
Нет смысла патчить готовые проги на /LARGEADDRESSAWARE , если код эту всю память не сможет заюзать.

пачиму? может я вчера на ночь глядя уже читал невнимательна - без етага патча или ключа проги вообще не могут использовать адреса выше 2 гиг

Добавлено:
http://forall.ru-board.com/egor23/online/FAQ/Virtual_Memory/Limits_Virtual_Memory.html

Автор: ne_viens
Дата сообщения: 24.10.2012 16:54
Я имел ввиду, что, а если проге 3GB и не надо? Ведь не каждая прога- Photoshop.
Автор: Nastya19kiss
Дата сообщения: 24.10.2012 17:53
Здрасьте!!! Пишу прогу по переводу двоичного числа в двоично-десятичный. Вот что получилось:
CALCBUFH - старший байт двоично-десятичного числа
CALCBUFM - средний байт
CALCBUFL -младший байт
CALCBUFL DATA 032h
; CALCBUFM DATA 031h
; CALCBUFH DATA 030h
; ===============================================================================
BIN2DEC:

mov DPH,CALCBUFM
mov DPL,CALCBUFL

mov CALCBUFH,#000h
mov CALCBUFM,#000h
mov CALCBUFL,#000h

mov B,#010h
BIN2DEC_1:
mov A,DPL
rlc A
mov DPL,A
mov A,DPH
rlc A
mov DPH,A

mov A,CALCBUFL
rlc A
da A
mov CALCBUFL,A
mov A,CALCBUFM
rlc A
da A
mov CALCBUFM,A
mov A,CALCBUFH
rlc A
da A
mov CALCBUFH,A
djnz B,BIN2DEC_1

Мне кажется что можно проще сделать или нет?
Автор: bomzzz
Дата сообщения: 24.10.2012 18:26

Цитата:
двоично-десятичного

сжатый десятичный формат?
Автор: Nastya19kiss
Дата сообщения: 24.10.2012 18:52
нет не в сжатый. Например 14=0001 0100
Автор: bomzzz
Дата сообщения: 24.10.2012 19:30
14 походу шестандцатиричное число тута? 20d=14h=10100b?

я не особо в этом синтаксисе понимаю, алгоритм - просто делишь на 10 число и получаешь в остатке цифру последнюю

Добавлено:

Цитата:
.386

.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\masm32.inc
include \MASM32\INCLUDE\gdi32.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\masm32.lib
includelib \MASM32\LIB\gdi32.lib
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib

.data
mestitle        db "Bomz",0
Number            dd 1234567890
SummaryForm        db 'Всего ссылок: '
            db 20 dup(0)

.data?
String             db 20 dup(?)

.code
start:

lea esi, String+20
mov ecx, esi
mov eax, Number
mov ebx, 10

@@:
dec esi
xor edx, edx
div ebx
add edx, 48
mov byte ptr [esi], dl
cmp eax, 0
jnz @B

sub ecx, esi
lea edi, SummaryForm+14
rep movsb
mov byte ptr[edi],0

invoke MessageBox,0,addr SummaryForm,ADDR mestitle,MB_OK + MB_ICONASTERISK
invoke ExitProcess,0

end start

это вообще для 32 бит на масме
Автор: ne_viens
Дата сообщения: 24.10.2012 19:36
14 -> 0001 0100 это сжатый, несжатый будет 14 -> 00000001 00000100

da не работает после rlc, только после add, addc, subb

Рабочий код:

Код:
; AVR bin2BCD16() algo implementation
ORG 0
;--------------------- init
mov R2, #0eeh ;in loByte
mov R3, #0ddh ;in hiByte

mov R4, #0 ;loOut (10 & 1)
mov R5, #0 ;midOut(1000 & 100)
mov R6, #0 ;hiOut (100000 & 10000)
mov R7, #16 ;bit counter

;--------------------- shift bits in
L1:
mov A, R2
rlc A
mov R2, A
mov A, R3
rlc A
mov R3, A

mov A, R4
rlc A
mov R4, A
mov A, R5
rlc A
mov R5, A
mov A, R6
rlc A
mov R6, A

djnz R7, L2 ;is last bit?
sjmp L6 ;yes, goto end

;--------------------- decimal adjust 3 output bytes
L2:
mov R0, #6 ;ptr out
L3:
mov A, @R0
add A, #3
jnb 0e3h, L4 ;is bit 3 of A set?

mov @R0, A ;yes, add 3
L4:
mov A, @R0
add A, #30h
jnb 0e7h, L5 ;is bit 7 of A set?

mov @R0, A ;yes, add 0x30
L5:
dec R0
cjne R0, #3, L3

;--------------------- next bit
sjmp L1

L6:
nop
END

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.