Помогите найти ошибку

Тема в разделе "WASM.BEGINNERS", создана пользователем Weert, 7 июн 2007.

  1. Weert

    Weert New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    24
    Товарищи! помогите найти ошибку. нужно определить начало строки и ее длину, причем начало должно быть в si, а длина в сх(для передачи этих параметров моей фун-ции. Пытался делать так:
    Код (Text):
    1. xor dx,dx
    2.     xor bx,bx
    3.     mov di,2
    4.     mov si,1
    5.     mov cl,buffer[1]
    6.     mov ch,0
    7.  
    8. POK:
    9.     push    cx
    10.  
    11.     cmp buffer[di],' '
    12.     jg  next
    13.     mov cx,bx
    14.     inc si
    15.     call    StrToInt
    16.     mov ax,x    ; Ђ•
    17.     call    dec_to_bin   ;‚›‡›‚Ђ…Њ ЏђЋ–…„“ђ“ Џ…ђ…‚Ћ„Ђ!!!
    18.     call    write
    19.     inc si
    20.     inc si
    21.     xor bx,bx
    22.     mov dx,666
    23.     jmp lala
    24. next:
    25.     inc bx
    26. lala:
    27.     inc di
    28.     pop cx
    29. Loop    POK
    Строчку до первого пробела он находит идеально, а дальше не идет. Подскажите где моя ошибка, очень срочно. Спасибо!
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    А можно чуть подробнее, что значит "определить начало строки"? В чем, и как ты собираешься это определять? По исходнику трудно что-то понять. Догадываюсь, что начало строки отмечено пробелом, но как определить конец строки не ясно...

    А вообще, чую, тему надо отправлять в студенческий раздел.
     
  3. Weert

    Weert New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    24
    Вот весь код. Задача в чем. Вводится строка с клавы и я должен все числа в этой строке перевести в двоичную сис.счис. Процедуру перевода, вывода на экран я напсиал. А вот как заорганизвоать все это в цикле не понятно....
    Код (Text):
    1. ;‘…ѓЊ…Ќ’ „ЂЌЌ›•
    2. .186    ;ўЄ«оз Ґ¬ Є®¬ ­¤л 186е Є ¬­Ґ©.(¤«п PUSHA Ё POPA)
    3. Data Segment
    4. err1    db  "ЋиЁЎЄ  ў ў®¤Ґ зЁб« .",10,13,'$'
    5. text    db  "‚ўҐ¤ЁвҐ cва®Єг зЁбҐ« ®в 0 ¤® 255",10,13,'$'
    6. buf db  8   dup(?)
    7. dva db  2
    8. d10 db  10
    9. x   dw  0
    10. buffer  db  255
    11. stroka  dw  25  
    12. Data ends
    13. ;++++++++++++++++++++++++++++++++++++++++++++++++++++
    14. ;//////////////////‘…ѓЊ…’Ќ ЉЋ„Ђ
    15. ;++++++++++++++++++++++++++++++++++++++++++++++++++++
    16. Code segment
    17.     assume cs:code, ds:data;
    18.  
    19. start:
    20.     mov ax,data
    21.     mov ds,ax
    22.  
    23. ;-------ЏаҐ¤« Ј Ґ¬ ўўҐбвЁ зЁб«®:
    24.     mov ah,9h
    25.     lea dx,text
    26.     int 21h
    27.  
    28. ;-------‘®Ўб⢥­­® б ¬ ўў®¤:
    29.     mov ah,0Ah
    30.     lea dx,buffer  ;ў ЎгдҐа § ЇЁблў Ґ¬ ўўҐ¤Ґ­го бва®Єг.
    31.     int 21h
    32.     mov si,2    ;б® ўв®а®Ј® Ў ©в  Ё¤Ґв б ¬  ўўҐ¤Ґ­ п бва®Є 
    33.     mov cl,buffer[1] ;§ ­®бЁ¬ ў ‘• 
    34.     mov ch,0         ;„«Ё­г ўўҐ¤Ґ­®© бва®ЄЁ
    35. ;-------------------ЏђЋ‚…ђџ…Њ ‘’ђЋЉ“
    36. Prover:                        
    37.     cmp buffer[si],'0' ; ’“’
    38.     jl  erro           ; ‚‘…
    39.     cmp buffer[si],'9' ;џ‘ЌЋ
    40.     jg  erro           ;!!!!
    41. probel:
    42.     inc si
    43. loop    prover
    44.  
    45. jmp Poehali
    46. erro:
    47.     cmp buffer[si],' '
    48.     je  probel
    49.     mov ah,9h
    50.     lea dx,err1  ;ў ЎгдҐа § ЇЁблў Ґ¬ ўўҐ¤Ґ­го бва®Єг.
    51.     int 21h
    52. JMP QUIT   
    53. ;/*/*/*/*/*/*/*/*/*/*/*/*/*/
    54. ;ROCK-N-ROLL!
    55. ;/*/*/*/*/*/*/*/*/*/*/*/*/*/
    56. Poehali:
    57. ;********************************
    58. ;*ЏаҐ®Ўа §®ўлў Ґ¬ бва®Єг ў зЁб«®*
    59. ;********************************
    60.     mov al,10
    61.     int 29h
    62.     mov al,13
    63.     int 29h
    64.  
    65. ;----
    66.     xor dx,dx
    67.     xor bx,bx
    68.     mov di,2
    69.     mov si,1
    70.     mov cl,buffer[1]
    71.     mov ch,0
    72.  
    73. POK:
    74.     push    cx
    75.  
    76.     cmp buffer[di],' '
    77.     jg  next
    78.     mov cx,bx
    79.     inc si
    80.     call    StrToInt
    81.     mov ax,x    ; Ђ•
    82.     call    dec_to_bin   ;‚›‡›‚Ђ…Њ ЏђЋ–…„“ђ“ Џ…ђ…‚Ћ„Ђ!!!
    83.     call    write
    84.     inc si
    85.     inc si
    86.     xor bx,bx
    87.     mov dx,666
    88.     jmp lala
    89. next:
    90.     inc bx
    91. lala:
    92.     inc di
    93.     pop cx
    94. Loop    POK
    95.  
    96.  
    97.  
    98.  
    99.  
    100.  
    101.  
    102.  
    103.  
    104. ;cmp    dx,1
    105. ;je net
    106. ;   mov cl,buffer[1]
    107. ;   xor ch,ch
    108. ;   mov si,2
    109.  ;
    110. ;   call    StrToInt
    111. ;   mov ax,x    ; Ђ•
    112. ;   call    dec_to_bin   ;‚›‡›‚Ђ…Њ ЏђЋ–…„“ђ“ Џ…ђ…‚Ћ„Ђ!!!
    113.  
    114.     mov si,8    ;ў si ¤«Ё­  бва®ЄЁ
    115.     mov cx,8    ;ў бе ⮦Ґ
    116. ;-*-*-*-*-*-*-*-*-*-‚›‚Ћ„?Њ „‚Ћ?—ЌЋ… —?‘‹Ћ ЌЂ ќЉђЂЌ-*-*-*-*-*-*-*-*-*-
    117. ;viv:
    118. ;   mov al,buf[si]  ;‘®Ўб⢥­­® Ї®бЁ¬ў®«м­л© ўлў®¤ ­  нЄа ­
    119. ;   int 29h             ;бва®ЄЁ.
    120. ;   dec si              ;‘ва®Єг ўлў®¤Ё¬ б Є®­ж .
    121. ;loop   viv
    122. net:
    123.  
    124.  
    125. ;‚›•Ћ„ ў....
    126.     jmp quit
    127. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    128. ;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
    129. ;ЏђЋ–…„“ђЂ Џ…ђ…‚Ћ„Ђ ?‡ ‘’ђЋЉ? ‚ —?‘‹Ћ!
    130. ;ЌЂ ‚室Ґ  buffer = ўўҐ¤Ґ­®© бва®ЄҐ. cx - Ї®§ЁжЁп
    131. ;Ќ  ўл室Ё ў е Ї®¬Ґй Ґвмбп зЁб«®
    132. ;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
    133. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    134. StrToInt    proc
    135.     pusha
    136. ;   mov si,2    ;б® ўв®а®Ј® Ў ©в  Ё¤Ґв б ¬  ўўҐ¤Ґ­ п бва®Є 
    137. ;   mov cl,buffer[1] ;§ ­®бЁ¬ ў ‘• 
    138. ;   xor ch,ch         ;„«Ё­г ўўҐ¤Ґ­®© бва®ЄЁ
    139.     xor ax,ax  
    140. per_ch:
    141.     mov bl,buffer[si]   ;ў bl «®¦Ё¬ ®зҐаҐ¤­®© бЁ¬ў®« бва®ЄЁ
    142.     sub bl,48       ;ўлзЁв Ґ¬ Є®¤ 0 Ё Ї®«гз Ґ¬ зЁб«®
    143.     xor bh,bh       ;зв®Ўл ў ‚• Ўл«® в®«мЄ® ­ иҐ зЁб«®
    144.     add ax,bx       ;бЄ« ¤лў Ґ¬ б Ђ•
    145.     cmp cx,1        ;ба ў­Ёў Ґ¬ ‘• б 1
    146.     jna exx     ;…б«Ё ¬Ґ­миҐ Ё«Ё а ў­® Ё¤e¬ ­  Є®­Ґж жЁЄ«        
    147.     mul     d10     ;?­ зҐ г¬­®¦ Ґ¬ зЁб«® ­  10
    148. exx:
    149.     inc si      ;‘«Ґ¤гойЁ© бЁ¬ў®«
    150. loop    per_ch 
    151. ;-------------------------------
    152.     mov x,ax    ;ў • б®е࠭塞 §­ зҐ­ЁҐ  е
    153.     popa        ;¤®бв Ґ¬ ўбҐ ॣЁбвал Ё§ бвнЄ 
    154.         Ret
    155. StrToInt    EndP
    156. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    157. ;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
    158. ;ЏђЋ–…„“ђЂ Џ…ђ…‚Ћ„Ђ ?‡ 10­®© ‘?‘’…Њ› ў „‚Ћ?—Ќ“ћ!
    159. ;ЌЂ ‚室Ґ Ђ• = ¤ҐбпвЁз­®¬г зЁб«г.
    160. ;Ќ  ўл室Ё ў buf Ї®¬Ґй Ґвмбп ¤ў®Ёз­®Ґ зЁб«®
    161. ;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
    162. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    163.  
    164. dec_to_bin  proc
    165.     pusha
    166.     mov cx,8    ;„«Ё­  бва®ЄЁ
    167.     mov si,2    ;б® ўв®а®Ј® Ў ©в  Ё¤Ґв бва®Є , ў ЇҐаўле ¤ўге б«г¦ҐЎ­ п Ё­д 
    168. cycl:
    169.     div dva ;„Ґ«Ё¬ ­  ®б­®ў ­ЁҐ бЁб⥬л бзЁб«Ґ­Ёп
    170.     push    ax  ;‘®е࠭塞  е ў бвнЄҐ
    171.     cmp ah,0    ;ба ў­Ёў Ґ¬  е б 0
    172.     jne ed  ;Ґб«Ё ­Ґ а ў­® в® § ЇЁблў Ґ¬ ў buf 1
    173.     mov al,48   ; Ё­ зҐ § ЇЁблў Ґ¬
    174.     mov buf[si],al;ЌЋ‹…ѓ!(Є®¤ ҐЈ® 48;)
    175.     jmp exxx    ;„г¬ о пб­®;)
    176. ed:
    177.     mov al,49     ;Ђ вгв § ЇЁблў Ґ¬ Ґ¤Ґ­ЁзЄг
    178.     mov buf[si],al;ЉЋ„ Ґ¤Ґ­ЁзЄЁ ў ASCII 49
    179. exxx:
    180.     pop ax  ;¤®бв Ґ¬  е
    181.     inc si  ;Ё¤Ґ¬ ­  б«Ґ¤гойЁ© бЁ¬ў®« бва®ЄЁ
    182. loop    cycl        ;Ї®ўв®а塞, ­ «Ёў Ґ¬
    183.     POPA   
    184.     RET
    185. dec_to_bin  EndP
    186.  
    187. ;**************************************
    188. write   proc
    189. PushA
    190. mov si,8    ;ў si ¤«Ё­  бва®ЄЁ
    191. mov cx,8    ;ў бе ⮦Ґ
    192. viv:
    193.     mov al,buf[si]  ;‘®Ўб⢥­­® Ї®бЁ¬ў®«м­л© ўлў®¤ ­  нЄа ­
    194.     int 29h             ;бва®ЄЁ.
    195.     dec si              ;‘ва®Єг ўлў®¤Ё¬ б Є®­ж .
    196. loop    viv
    197. Popa
    198.     RET
    199. write   endp
    200. ;“ђЂ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    201. ;Џђ?‘’…ѓ?‚Ђ…Њ ђ…ЊЌ?, ЌЂ‹?‚Ђ…Њ Џ?‚Ћ ? ЌЂ‘‹Ђ†„Ђ…Њ‘џ ђЂЃЋ’Ћ‰ ЏђЋѓ?!!!
    202. ;“ђЂ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    203. quit:
    204.     mov ax,4C00h
    205.     int 21h
    206. ;*-*-*-*-*-*-*-*-*
    207.  
    208. Code ends
    209.  
    210. end start