curious123

z-80 study(ing)

Feb 27th, 2017
125
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Z-80 assembler, for msx computers!!!Styding
  2.  
  3. Código retirado, da apostilha [MSXBR-L] ; arquivo ASSEMB22.txt ; todos os direitos à [ MSXBR-L] ; por cyberknight
  4. Copied from [MSXBR-L] msx assembler tutorial, file ASSEMB22.txt; all rights to group [MSXBR-L]; author cyberknight.
  5. 100 LD IX,(0F7F8H)
  6. 110 LD H,(IX+2)
  7. 120 LD L,(IX+1)
  8. 130 LD C,(HL)
  9. 140 INC HL
  10. 150 LD B,(HL)
  11. 160 INC HL
  12. 170 LD E,(HL)
  13. 180 PUSH DE
  14. 190 POP AF
  15. 200 INC HL
  16. 210 PUSH AF
  17. 220 POP DE
  18. 230 LD (HL),E
  19. 240 DEC HL
  20. 250 LD (HL),B
  21. 260 DEC HL
  22. 270 LD (HL),C
  23. 280 RET ; 3 entradas, 3 saídas
  24.  
  25. Brazilian-Portuguese====>
  26. O endereço F7F8 se refere-se ao uso da função usr() do basic, onde o basic passa a variável ao código de máquina;
  27. recebendo da seguinte forma(código de máquina):
  28. ====>
  29.  
  30. English====>
  31. The address refers to usr function, where it get's an address of 16 bits, 65536 =>FFFF, where lessmore(lsb),Moreless(Msb) - addres format: example c000 - it turns in address: 00 c0.
  32.  
  33. Using a$=USR(B$) ; the address will point to a structure of 3 bytes:
  34. First is the len of the string.
  35. second is the lsb address
  36. third is the msb address
  37.  
  38. with this address you have acess to entire dado of user.
  39. Explain of doubt in assembler program:
  40. 110 we have the msb
  41. 120 we have the lsb
  42. 130 lenght of user data
  43. 140 sun+1 to get the lsb
  44. 150 B get the data of lsb address
  45. 160 sun+1 to get then msb
  46. 170 E get's then data of msb address
  47. 180 pushed(stack operation) of DE, i don't know of the data that there is in 'D'???
  48. 190 desPUSHED(pop), the intents here is to test 'F' register of flags!!!
  49. 200 sun+1???? why he have done this??(since we have all the 3 data inputs)
  50. 210 sun+1 to HL, maybe this is to test the 'F' register of flags
  51. 220 POP DE, returned to it's original register like before.
  52. 230..270 from 230 to 270, return original data's to it's address, but..., the address was plused(+1), than i
  53. think the last instruction will be init+1, but the way, look's like we have two equal values on init,
  54. the data on (HL),C and the data on "(HL+1),C";
  55. I would like to know, if my forgetting something, or if i i haven't unnottice something;
  56. any words are welcome:
  57. wand1973wfs@gmail.com
  58.  
  59.  
  60.  
  61. Brazilian-Portuguese====>
  62. os dois bytes na forma lsb(less significante antes),msb(more significante) llMM (aponta para o address da variável);
  63. quanto ao tipo da variável, no caso string(b$=USR(a$), é composto de 3 bytes;
  64. 1 o primeiro é o tamanho da variável (maximo 255 = FF)
  65. 2 endereço lsb
  66. 3 endereço msb
  67. Na linha 110 temos o msb,
  68. Na linha 120 temos o lsb,
  69. Na linha 130 temos o tamanho da variável (`len(a$)`)
  70. Na linha 140 soma o endereço (`len(a$)`), virando assim o lsb
  71. Na linha 150, B, recebe o byte do endereço ( 1 letra da variavel )
  72. Na linha 160, desloca-se para a segunda letra
  73. Na linha 170, E, recebe o byte do endereço ( 2 letra da variavel )
  74. Na linha 180, é armazenado somente a 2 letra (não sei o que tem no "D"???)
  75. Na linha 190, desempilha em AF, os dados de DE (propósitos de manipulação "Flags", para ver se interfere em F(valor))
  76. Na linha 200 (aqui é a minha dúvida???!!!), por que ele fez isto (não vejo necessidade, ou será que não estou observando algo)????
  77. Como na linha anterior, andou mais um, acredito que estária na terceira palavra, ou posição de memória;
  78. Talvez seja para provocar alguma mudança nos "Flags", e ver se alterou o valor do registrador F(PUSH AF);
  79. Observamos aqui o empilhamento; 210 PUSH AF
  80. Começamos a fazer o caminho de volta;
  81. 220 POP DE ; desempilha em DE
  82. 230 LD (HL),E ; (HL) recebe o valor de E, "mas o endereço não é o mesmo da linha 170, "Foi somando mais um"
  83. "o endereço anterior deve existir um mesmo valor!!!"
  84. 240 DEC HL ; se deslocando para o byte anterior.
  85. 250 LD (HL),B ; (HL) recebera o valor de B, como o ocorrido acima.
  86. 260 DEC HL ; se deslocando para o byte anterior.
  87. 270 LD (HL),C ; (HL) recebera o valor de C, que seria o tamanho da "String".
  88. ainda existe um endeço anterior à este, ficando duas copias identicas em (HL) e (HL-1).
  89. 280 RET ; Devolve o controle ao BASIC.
  90. 3 entradas : linhas 130,150,170
  91. 3 saidas : linhas 230,250,170 (mas os endereços deslocados por +1 por que???)
  92. Se alguém puder me ajudar, ficaria muito grato!!!
  93. wand1973wfs@gmail.com
RAW Paste Data