Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

25.11.2008, 21:44
|
|
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
Провел на форуме: 3371897
Репутация:
1462
|
|
Банальный вопрос ,
FASM
Есть адрес Буфера MyBuffer (выделенного через HeapAlloc )
как обратиться по адресу внутри переменной содержащий адрес буфера? тоесть например как 10й байт самого буфера поменять на свой байт ?
FASM
Последний раз редактировалось Jes; 25.11.2008 в 21:48..
|
|
|

25.11.2008, 21:53
|
|
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме: 7134052
Репутация:
1204
|
|
Jes, как-то так
mov byte ptr [MyBuffer+10], ah
|
|
|

25.11.2008, 22:19
|
|
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
Провел на форуме: 3371897
Репутация:
1462
|
|
fasm ptr принципиально понимать не хочет :/
|
|
|

25.11.2008, 22:56
|
|
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме: 1777055
Репутация:
347
|
|
fasm понимает название переменной как адрес.
То есть чтобы обратиться к переменной всегда нужны скобки
mov [x], 1
mov [x+5], 1
mov [x], al
mov eax, [x]
допустим в pBuf адрес буфера
mov esi, [pBuf]
mov al, [esi+10]
так в al будет десятый байт буфера
mov [esi+10], ah
так десятым байтом буфера станет содержимое ah
Последний раз редактировалось bons; 25.11.2008 в 23:20..
|
|
|

28.11.2008, 20:44
|
|
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме: 422909
Репутация:
200
|
|
Ребят, кому не жалко и если есть свободное время. Думаю тем кто знает asm это будет достаточно тривиально..
на TASMе
на консоль вывести просто любые положительные и любые отрицательные числа...
Буду благодарен=)
[Актуально до 29.1108]
|
|
|

29.11.2008, 02:50
|
|
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме: 3013539
Репутация:
441
|
|
Сообщение от A2GIL
Ребят, кому не жалко и если есть свободное время. Думаю тем кто знает asm это будет достаточно тривиально..
на TASMе
на консоль вывести просто любые положительные и любые отрицательные числа...
Буду благодарен=)
[Актуально до 29.1108]
уже писал в асю, напишу здесь вдруг кому понадобится.
что делает: выводит числа (процедура procoutnum делает форматный вывод), число находится в ax (передается в процедуру procoutnum) (в ax именно число, а не код символа)
фичи (для процедуры procoutnum):
dl - длина поля для вывода числа (если dl меньше количества цифр в числе, то число выводится примыкаясь к предыдущевыведенному, что-то на подобии форматного вывода ф-ции write в паскале)
dh = 1 формат вывода со знаком (-1 выведется как -1)
dh = 2 формат вывода без знака (-1 выведется как 65535)
в основной "процедуре" start два цикла для вывода чисел от 0 до 9 и от -1 до -10
Код:
stack segment stack
dw 128 dup(?)
stack ends
code segment
assume cs: code
procoutnum proc far
push bp
mov bp,sp
push ax
push dx
push si
sub sp,6
cmp dh,1
jne pon0
cmp ax,0
jge pon0
mov dh,2
neg ax
pon0:
push dx
xor si,si
pon1:
mov dx,0
div cs:ten
add dl,'0'
mov byte ptr [bp-12+si],dl
inc si
or ax,ax
jnz pon1
pop dx
cmp dh,2
jne pon2
mov byte ptr [bp-12+si],'-'
inc si
pon2:
mov dh,0
mov ah,2
pon21:
cmp dx,si
jle pon3
push dx
mov dl,' '
int 21h
pop dx
dec dx
jmp pon21
pon3:
dec si
mov dl,byte ptr [bp-12+si]
int 21h
or si,si
jnz pon3
add sp,6
pop si
pop dx
pop ax
pop bp
ret
ten dw 10
procoutnum endp
start:
mov cx, 10
xor ax, ax
mov dh,1
mov dl, 2
l:
call procoutnum
inc ax
loop l
mov cx, 10
xor ax,ax
k:
dec ax
call procoutnum
loop k
mov ah, 10h
int 16h
mov ah, 4ch
int 21h
code ends
end start
Последний раз редактировалось VERte][; 29.11.2008 в 02:54..
|
|
|

30.11.2008, 15:43
|
|
Постоянный
Регистрация: 22.03.2008
Сообщений: 325
Провел на форуме: 1208132
Репутация:
63
|
|
Ребята я вообще по 0 в асемблере , нужно вот это написать
y=10 если x>5 или x=c
y= 12 в других случаях
|
|
|

30.11.2008, 15:51
|
|
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме: 7134052
Репутация:
1204
|
|
Buffalon
Код:
cmp x, 5
jbe ELSE
cmp x, c
jne ELSE
mov y, 10
jmp CONT
ELSE: mov y, 12
CONT: ...
|
|
|

01.12.2008, 20:09
|
|
Участник форума
Регистрация: 06.11.2008
Сообщений: 208
Провел на форуме: 261838
Репутация:
9
|
|
Доброго времени суток. Надеюсь кто-то из здесь присутствубщих имел когда нибудь дело с отладочным стендом EV8031/AVR (V. 3.2), вот по нему у меня и лаба. Изначально задание было таким:
По нажатию кнопки SW15 включать «бегущий огонь» на линейке светодиодов HL1-HL8. Код этой проги вот:
Код:
CSEG
ORG 0
Continue:
mov A, #10000000b
mov DPTR, #0A006h
movx @DPTR, A ;отменить гашение знакомест С_инд
mov A, #0h ;записать в Акк. число 04
mov DPTR, #0A006h ;установить в DPTR адрес левой
;пары знакомест С_инд
movx @DPTR, A
mov DPTR, #0B006h ;установить в DPTR адрес правой
;пары знакомест С_инд
movx @DPTR, A
CALL ZAD ;вызов подпрограммы задержки
mov A, #10000000b
mov DPTR, #0A006h
movx @DPTR, A ;погасить все знакоместа С_инд
CALL ZAD ;вызов подпрограммы задержки
mov A, #01000000b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00100000b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00010000b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00001000b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00000100b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00000010b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
mov A, #00000001b
mov DPTR, #0A006h
movx @DPTR, A
CALL ZAD
jmp Continue ;переход на начало программы
ZAD: ;подпрограмма задержки
mov R1, #0FFh
C2: mov R2, #0FFh
C4: djnz R2, C4
djnz R1, C2
ret ;выход из подпрограммы
END
Но потом последовало дополнительное задание, звучит: При нажатии кнопки SW15 включать «бегущий огонь» на линейке светодиодов HL1-HL8, при еще одном нажатии "бегущий огонь" должен остановиться, при еще одно - дальше "побежать"....
думал две пары как сделать(даже на С++ пытался) - не могу...
Помогите плиз...
|
|
|

03.12.2008, 15:01
|
|
Познающий
Регистрация: 13.02.2007
Сообщений: 41
Провел на форуме: 137010
Репутация:
26
|
|
Ребят, есть вопрос по небольшой проге. вот код:
Код:
assume cs:code, ds:data
code segment
org 100h
start:
lea bx, work
mov cx, 10
mov di, 0 ; index (row)
a0:
push cx
push di
mov cx, 10
mov di, 0 ;index (column)
a1:
;mov [bx+di*2], di
mov 2[bx][di], di
; start show number
mov ax, 2[bx][di]
push cx
push di
std
lea di,StringEnd-1
mov cx,10
iRepeat:
xor dx,dx
div cx
xchg ax,dx
add al,'0'
stosb
xchg ax,dx
or ax,ax
jne iRepeat
mov ah,9
lea dx,[di+1]
int 21h
mov dx, offset Space
int 21h
pop di
pop cx
inc di
;end show number
loop a1
pop di ;reincornate di, cx
pop cx ;
add bx, 10*2 ; go to next line
push ax
push dx
mov ah, 9
mov dx, offset nl
int 21h
pop dx
pop ax
loop a0
Space db " ", '$'
String db 5 dup (?),'$' ; 5 byte for string
StringEnd = $-1 ; Ukazatel' na simvol '$'
work dw 100 dup (0h) ;mass work <- 100 word's
nl db 0Dh, 0Ah, '$'
code ends
data segment
ends data
end start
Здесь задается матрица 10*10, заполняется нулями, а затем в двойном цикле заполняется числами (0...9) и на каждой итерации элемент выводится в консоль.
Проблема в том, что выводится только 75 элементов, а не все 100 - в чем причина?)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|