это вероятно, один из сообщества микроконтроллерных сектантов
» Assembler
а я вот несколько похожих кодов под Лин встречал, подо что же они были?
под ПоверРС что ли?
Добавлено:
а может это Альфа?
под ПоверРС что ли?
Добавлено:
а может это Альфа?
Данный код написан на языке программирования asm51
Числа с знаком суммируются примерно также, только:
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
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
Предыдущий пост игнорировать.
Код:
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
Код:
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
Я уже доделала. Спасибо большое!!!
Добавлено:
Мне еще сортировку нужно сделать. Чет не могу сообразить пока
Добавлено:
Мне еще сортировку нужно сделать. Чет не могу сообразить пока
Есть готовые алгоритмы сортировки (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
Код:
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
можно вопрос....немного не понятна строчка mov 4,@R1. что значит 4?
Четвёртая ячейка памяти (или R4). B данном случае temp переменная.
Спасибо огромное. Я нашла пару примеров, твой более понятный
\MASM32\BIN\EDITBIN.EXE /LARGEADDRESSAWARE Project.exe
никто не знает случайно как это правильно использовать в МАСМ32?
http://ntcore.com/4gb_patch.php - вот эта фигня вроде работает
никто не знает случайно как это правильно использовать в МАСМ32?
http://ntcore.com/4gb_patch.php - вот эта фигня вроде работает
;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
;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
ne_viens
ml /c /coff test.bat
:)
кстати, почему бат?
je @F
а это куда отскок?
ml /c /coff test.bat
:)
кстати, почему бат?
je @F
а это куда отскок?
Чтоб "C:\MASM32\bin\bldall.bat" не править.
je @F прыгает к последующему @@: , @B - к предыдущему. Это удобно, если код программы линеарный без JMP макаронов.
je @F прыгает к последующему @@: , @B - к предыдущему. Это удобно, если код программы линеарный без JMP макаронов.
это удобно чтоб не выдумывать постоянно говорящие имена переходам
ne_viens
сенки. вот еще более крутая прога в частности умеющая патчить екзешники для /3G ключа
http://ntcore.com/exsuite.php
ne_viens
сенки. вот еще более крутая прога в частности умеющая патчить екзешники для /3G ключа
http://ntcore.com/exsuite.php
ясно...
ml /coff
а масм дефолтом теперь OMF генерит что ли?
ml /coff
а масм дефолтом теперь OMF генерит что ли?
ne_viens
70000000h - а что эти загадочные письмена доказывают, зачем выделять 1792 мб?
akaGM
Цитата:
http://wasm.ru/article.php?article=drvw2k03
70000000h - а что эти загадочные письмена доказывают, зачем выделять 1792 мб?
akaGM
Цитата:
кстати, почему бат?
http://wasm.ru/article.php?article=drvw2k03
>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
Незнаю, я с 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
ne_viens
мелкие сами в своём компиляторе не уверены :)
bomzzz
ясно...
мелкие сами в своём компиляторе не уверены :)
bomzzz
ясно...
MASM32 детище hutch'a.
Он взял MASM и добавил туда *.inc, *.lib, примитивную среду разработки (qeditor), примеры и ещё кучку мелочи.
Программирование я именно с масма начал изучать.
Он взял MASM и добавил туда *.inc, *.lib, примитивную среду разработки (qeditor), примеры и ещё кучку мелочи.
Программирование я именно с масма начал изучать.
я не понял, masm32 это не М$ masm?
M$ MASM- это ml.exe + link.exe
MASM32- среда разработки, на которой можно полноценные проги писать.
MASM32- среда разработки, на которой можно полноценные проги писать.
Цитата:
MASM32- среда разработки, на которой можно полноценные проги писать
а на масме неполноценные? :)
в смысле у этого чуда своя ИДЕ?
Цитата:
Нет смысла патчить готовые проги на /LARGEADDRESSAWARE , если код эту всю память не сможет заюзать.
пачиму? может я вчера на ночь глядя уже читал невнимательна - без етага патча или ключа проги вообще не могут использовать адреса выше 2 гиг
Добавлено:
http://forall.ru-board.com/egor23/online/FAQ/Virtual_Memory/Limits_Virtual_Memory.html
Я имел ввиду, что, а если проге 3GB и не надо? Ведь не каждая прога- Photoshop.
Здрасьте!!! Пишу прогу по переводу двоичного числа в двоично-десятичный. Вот что получилось:
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
Мне кажется что можно проще сделать или нет?
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
Мне кажется что можно проще сделать или нет?
Цитата:
двоично-десятичного
сжатый десятичный формат?
нет не в сжатый. Например 14=0001 0100
14 походу шестандцатиричное число тута? 20d=14h=10100b?
я не особо в этом синтаксисе понимаю, алгоритм - просто делишь на 10 число и получаешь в остатке цифру последнюю
Добавлено:
Цитата:
это вообще для 32 бит на масме
я не особо в этом синтаксисе понимаю, алгоритм - просто делишь на 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 бит на масме
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
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, истории становления российского интернета. Сделано для людей.