Hello i have exercise to do a clock which will be counting from 1 to 59 in loop without ending. Can someone answer me to couple questions ?
- Why there are such numbers after DB? Is it ASCII or what?
- Why to BL we adding 03 ?
If someone can explain me line after line code. Thanks do much.
Language: sms32v50 assembler
JMP start
DB FA ; 0
DB 0A ; 1
DB B6 ; 2
DB 9E ; 3
DB 4E ; 4
DB DC ; 5
DB FC ; 6
DB 8A ; 7
DB FE ; 8
DB DE ; 9
start:
MOV DL, 00
start1:
MOV [90], DL
MOV BL, [90]
MOD BL, 0A
ADD BL, 03
MOV AL, [BL]
INC AL
OUT 02
MOV BL, [90]
DIV BL, 0A
ADD BL, 03
MOV AL, [BL]
OUT 02
NOP
NOP
NOP
INC DL
CMP DL, 3C
JNZ koniec
MOV DL, 00
JMP start1
koniec:
JMP start1
END
I couldn't find the answer.
All the numbers in your code are expressed as hexadecimal. Normally this would require either a "0x" prefix or an "h" suffix.
eg.
CMP DL, 3C
would have to be written asCMP DL, 0x3C
orCMP DL, 3Ch
.The code has numerous errors based on the x86-16 tag:
MOD BL, 0A
There's no suchmod
instruction for x86-16.MOV AL, [BL]
You can't use a byte register for addressing memory.OUT 02
Outputting needs to specify the size.DIV BL, 0A
No dividing by an immediate available.No ASCII, I am pretty sure these numbers are bitvectors that would enable to visualize the decimal digits as if on a digital clock (with 7 segments).
The bits correspond to the segments as follows:
Who knows in a code with this many errors, but again I am almost sure the 03 is a typo for 30 which would add 48 in decimal to convert from [0,9] into ["0","9"].
EDIT: It's code for a sms32v50 simulator
The above mentioned errors become void!
After having read the help page provided by Michael Petch, I now better understand where that 'adding 03' comes from: it's the address in memory where the table with the bitvectors is stored.
Code like
is equivalent to
The
INC AL
is added to the bitvector so as to output to the rightmost digit. Without setting bit 0, output goes to the leftmost digit.ADD BL, 03
could still be an error knowing thatJMP start
has but a 2-byte encoding! We would have to see the program in action to know for sure. It could relate to the task description ("a clock which will be counting from 1 to 59") because the program currently starts from 0 in the DL register...