2018-07-06 11:08 PM
Hi
I use STM8S-Discovery Board with STM8S105C6 and ST Visual Develop v4.3.10, Windows 10.
If I use command ADDW or SUBW this way:
------------------------------------------------------------------------------
Example 1
ldw X,&sharp400
;Load 400 into Xaddw X,&sharp100
;Add direct 100 to word Xtest cpw X,&sharp500
;Compare X with 500jreq test
;Jump to 'test' if X=500------------------------------------------------------------------------------
it works properly. The content X is 500.
But if I do this
------------------------------------------------------------------------------
Example 2
k equ $0365
;RAM register is called kmov k,&sharp100
;Move 100 into kldw X,&sharp400
;Load 400 into Xaddw X,k
;Add k to word Xtest cpw X,&sharp500
;Compare X with 500jreq test
;Jump to 'test' if X=500------------------------------------------------------------------------------
it doesn�t work. The content of X is not 500.
SUBW behave the same way.
According the programming manual PM004 Doc ID 13590 Rev3, page 78 and 152,
Example 2 should actually work. Issue or do I miss something?
Thanks for reply.
Ivan
#addw #subw #stm8s105c6 #assembly #basic-arithmetic2018-07-07 08:45 AM
Dupe
https://community.st.com/0D50X00009XkVvrSAF
Doesn't seem to be getting much traction, options would be to contact local ST office, FAE for your account, or post an Online Support Request.
2018-07-08 06:46 AM
Thanks anyway.
2018-07-13 01:01 AM
I think the problem is that the
instruction
'ADDW' is wordinstruction,
and the variable 'k' is byte. In this example, on the $0365 address is #100=#$64 number. When ADDW X, k is executed, 'k' loaded as #$64xx. 'xx' means we do not know what the number is at $0366 adress.One repair option:
k equ $0365 ; the RAM register is called k
ldw X, # 100 ; Move 100 to X
ldw k,X ; move 100 to k address
ldw X, # 400 ; Load 400 in X
addw X, k ; Add k to word X
test cpw X, # 500; Compare X with 500
jreq test ; Jump to 'test' if X = 500
2018-07-16 02:28 AM
,
,
Thanks for reply.
It seems I didn´t understood the loading mechanism with word and byte.
I thought k is added as byte to the lower part (XL) of X which acctualy is a byte too.
If I clear address $0366 first then k is loaded as ♯ $6400 when ADDW is executed. ,
ADDW X,k would then lead to X= ♯ 26000 ( ♯ $0190 + ♯ $6400 = ♯ $6590)
LDW , , , , , ,X, ♯ 100 , , , ,,X loaded with ♯ $0064
LDW , , , , , ,k,X , , , , , , , , ,,leads to address $0365 with content ♯ $00 and $0366 with ♯ $64
LDW , , , , , ,X, ♯ 400 , , , , , ,,X loaded with ♯ $0190
ADDW , , , ,X,k , , , , , , , , , , , ,, ♯ $0190 + ♯ $0064 = ♯ $01F4 = ♯ 500
It works now.
Thanks!