В программе есть вот такая строчка.
.equ time = 0xFF
Как изменить time ну допустим где ни будь в середине программы на ASM?
типа ldi time, 0x60 только правильно)
Код: Выделить всё
.CSEG
.SET time = 0x00Код: Выделить всё
.DSEG
.ORG SRAM_START
time: .byte 1Код: Выделить всё
.CSEG
lds r16, time
subi r16,(-1) ; это нам типа нужно увеличить переменную time на единицу от ее начального значения :))
; хотели бы уменьшить на единицу, написали бы subi r16,1
sts time, r16 ; теперь сохраняем новое значение переменной time, которое и можем использовать
; и изменять столько раз, сколько хочется, вот этим самым куском кодаКод: Выделить всё
.DSEG
.ORG SRAM_START
.SET time = 0x00
.CSEG
lds r16, time
subi r16,(-1)
sts time, r16
Код: Выделить всё
.equ time=1
.equ time=2Код: Выделить всё
#ifdef true
.equ xx = 1
#else
.equ xx = 0
#endifДа, если пользоваться другой директивой. А вы серьёзно не знали про директиву .set ?vdavid писал(а):Kavka, Вы серьезно?
Код: Выделить всё
.DSEG
.ORG SRAM_STARTКод: Выделить всё
.set time = 0xf0
ldi r16, time
sts 0x100, r16
ldi r16, 0x00
lds r16, 0x100
subi r16,(-1)
sts 0x100, r16
ldi r16, 0x00
lds r16, 0x100Код: Выделить всё
.DSEG
.ORG 0x100
MyVar: .BYTE 2
.CSEG
.set MyVar = 0xABCDКод: Выделить всё
MyVar: .BYTE 2Единственное его применение - разметить (распределить) рам и обозначить эту разметку текстовыми метками (туфтатавтологично), которые будет удобно читать человеческими глазами в процессе написания и отладки.этот dseg, если единственное его применение - указать размер в байтах у некой переменной, которой даже значение присвоить не получается
Код: Выделить всё
.set time = 0xf0
lds r16, timeЕсли компилятор не выдал ошибок при сборке проекта - это еще не значит, что код работает именно так, как Вы его задумали.И оно работает правильно.