Найти часть кода, которая отвечает за ascii - Assembler
Формулировка задачи:
Когда в целую часть числа вводим более 12 символов, висвечуется "Vvedeno bilshe 6 baytiv! Vidbudetsya perezapusk"
А сразу после нашы же 12 символов переведенные в ascii код(например, вместо 2, появляется смайлик), пожалуйста помогите найти даную часть кода, мне ёё нужно убрать
codseg segment assume cs:codseg, ds:codseg ;виведення упакованого числа на екран vuvod macro a, b1 local m1, m2 push dx push si ;виконаємо обнулення буферу розпаковки mov di, 11 m1: mov b[di], 0 dec di cmp di, -1 jne m1 ;виконаємо розпаковку упаков. числа mov di, 0 mov si, 0 m2: razpacovka di, si, a, b inc di add si, 2 cmp di, 6 jne m2 ;вернемо в програму регістри pop si pop dx endm vvod macro a, e local m2, m6, m7, m8, m1, m3, m4, m5, sh ;обнулемо тимчасовий буфер mov di, 11 m1: mov b[di], 0 dec di cmp di, -1 jne m1 ;починаємо введення чисел в неупак. формати mov di, 11 mov temp1, 0 m2: mov ah, 0h int 16h ;якщо введена ціла частина cmp al, '.' je m6 ;переходимо до введення дробової ;перевіримо на правельність вводу cmp al, '0' jb m2 cmp al, '9' ja m2 ;запишемо введену цифру в тимчас. буфер mov b[di], al sub b[di], 30h dec di ;виведемо на екран введену цифру mov dl, al mov ah, 02h int 21h inc temp1 ;кількість введень в пам’ять cmp di, -2 je sh jmp m2 sh: mov ax, 3; int 10h mov ah, 09h lea dx, er int 21h mov ah, 0h int 16h jmp al1 ;виконаємо перенесення числа на початок сітки m6: mov di, 12 sub di, temp1 mov temp2, di mov si, 0 m7: mov al, b[di] mov b[si], al inc di inc si cmp si, 11 jne m7 mov di, 12 sub di, temp2 m8: mov b[di], 0h inc di cmp di, 12 jne m8 mov b[12], '$' ;вкажемо на кінець буферу ;виконаємо упаковку числа, де б - тимчасовий буфер ;а - результат упакування, почати с 2 байту та 0 - кінцевий upacovka b, a, 5, 0 mov dl, '.' mov ah, 02h int 21h ;обнулемо тимчасовий буфер mov di, 11 m3: mov b[di], 0 dec di cmp di, -1 jne m3 ;починаємо введення чисел в неупак. формати mov di, 11 m4: mov ah, 0h int 16h ;якщо введена ціла частина cmp al, 13 je m5 ;переходимо до введення дробової ;перевіримо на правельність вводу cmp al, '0' jb m4 cmp al, '9' ja m4 ;запишемо введену цифру в тимчас. буфер mov b[di], al sub b[di], 30h dec di ;виведемо на екран введену цифру mov dl, al mov ah, 02h int 21h cmp di, -2 jne m4 m5: upacovka b, e, 5, 0 endm dodav macro local m1, m2, m3 ;обнулемо результату mov di, 5 m1: mov c1[di], 0 mov c2[di], 0 dec di cmp di, -1 jne m1 ;виконаємо додавання 3-х байтових роз. сіток mov cx, 6 mov di, 5 m2: mov al, a2[di] mov bl, b2[di] adc al, bl daa ;корекція додавання bsd чисел mov c2[di], al dec di loop m2 ;складемо цілу частину аналогічно дробовій mov cx, 6 mov di, 5 m3: mov al, a1[di] mov bl, b1[di] adc al, bl daa mov c1[di], al dec di loop m3 endm vidnim macro local m1, m2, m3 ;обнулемо результату mov di, 5 m1: mov c1[di], 0 mov c2[di], 0 dec di cmp di, -1 jne m1 ;виконаємо додавання 3-х байтових роз. сіток mov cx, 6 mov di, 5 m2: mov al, a2[di] mov bl, b2[di] sbb al, bl das ;корекція додавання bsd чисел mov c2[di], al dec di loop m2 ;складемо цілу частину аналогічно дробовій mov cx, 6 mov di, 5 m3: mov al, a1[di] mov bl, b1[di] sbb al, bl das mov c1[di], al dec di loop m3 endm mnog macro local m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12 ;виконаємо розпаковку упаков. цілої частини числа А mov di, 0 mov si, 0 m1: razpacovka di, si, a1, d1 inc di add si, 2 cmp di, 6 jne m1 ;виконаємо розпаковку упаков. дробової частини числа А mov di, 0 mov si, 12 m2: razpacovka di, si, a2, d1 inc di add si, 2 cmp di, 6 jne m2 ;виконаємо розпаковку упаков. цілої частини числа Б mov di, 0 mov si, 0 m3: razpacovka di, si, b1, d2 inc di add si, 2 cmp di, 6 jne m3 ;виконаємо розпаковку упаков. дробової частини числа Б mov di, 0 mov si, 12 m4: razpacovka di, si, b2, d2 inc di add si, 2 cmp di, 6 jne m4 ;обнулемо результату mov di, 48 m9: mov d3[di], 0 mov d4[di], 0 dec di cmp di, -1 jne m9 ;вже неупаковане число множимл ;методом стовпчика mov si, 23 m5: mov cx, 24 mov di, 23 m6: mov al, d1[di] sub al, 30h mov bl, d2[si] sub bl, 30h mul bl aam ;корекція при множенні mov temp1, di mov temp2, si ;додамо проміжний результат до результату push cx push di mov di, temp1 add di, temp2 mov d3[di], al ;молодний розряд в старший байт mov d3[di-1], ah ;старший навпаки mov cx, 48 mov di, 47 m7: mov al, d3[di] mov bl, d4[di] adc al, bl aaa mov d4[di], al dec di loop m7 mov cx, 48 mov di, 0 m8: mov d3[di], 0h inc di loop m8 ;повернемо в програму регістри pop di pop cx dec di loop m6 dec si cmp si, 0 ;якщо умножили останній регістр je m10 ;переходимо до jmp m5 ;виведемо буфер д4 в зворотному порядку m10:mov cx, 24 mov di, 0 m11:cmp di, 12 jne m12 ;встановивши програмно кому mov al, '.' mov ah, 14 int 10h m12:mov al, d4[di+11] ;змістимо на 6 регістрив цифри add al, 30h mov ah, 14 int 10h inc di loop m11 endm ;виконаємо розпаковку упаковагого числа razpacovka macro e, c, d, f push ax push dx mov ah, 0 mov al, d[e] ror ax, 4 ;вик. циклічний зсув в право регістру ах shr ah, 4 ;зсув аh на 4 or ax, '00' mov word ptr f + c, ax ;результат в f по адресі с pop dx pop ax endm ;виконаємо упаковання числа d. Результат в e upacovka macro d, e, f, g local m1 push ax push dx mov di, 0 mov si, f m1: mov al, d[di] mov c[1], al ;запишемо в тим. буфер ал mov al, d[di+1] mov c[0], al mov ax, word ptr c ;запишемо 2 байти (слово) в ах shl ah, 4 rol ax, 4 mov e[si], al ;результат зсівів в ал dec si add di, 2 cmp si, g-1 ;виконаємо цикл jne m1 pop dx pop ax endm start: jmp as mn db 10, 13, 'Rezultat mnogennya:', 10, 13, '$' ad db 10, 13, 'Rezultat dodavannya:', 10, 13, '$' sb db 10, 13, 'Rezultat vidnimannya:', 10, 13, '$' inf db 'Kursova robota', 10, 13, 'Na temu: "Model arufmetuko-logichnogo prustrou"', 10, 13 db 'Z dusuplinu: "Sustemne Programuvannya"$' zv db 'Vukonav: student grupu SPS-1466, Makarenko E.V., 3 kurs', 10, 13 db 'Zavdannya: kilkist bayt v drob. ta siliy chastuni: 6.', 10, 13, 'Tup zberegennya v pamyati: upakovanuy$' lin db 10, 13, '-------------------------------', 10, 13, '$' gi db 'Vvedit dva chusla ta diu:', 10, 13, '$' er db 10, 13, 'Vvedeno bilshe 6 baytiv! Vidbudetsya perezapusk$' b db 12 dup(?), "$" ;тимчасовий буфер для розпаковки c db 2 dup(?) ;тимчасовый буфер для введення в память a1 db 6 dup(?) ;упаковане число А ціла частина a2 db 6 dup(?) ;упаковане число А дробова частина b1 db 6 dup(?) ;упаковане число B ціла частина b2 db 6 dup(?) ;упаковане число B дробова частина c1 db 6 dup(?) ;упаковане число С ціла частина c2 db 6 dup(?) ;упаковане число С дробова частина d1 db 24 dup(?) ;переводимо число А в один буфер d2 db 24 dup(?) ;переводимо число Б в один буфер d3 db 48 dup(?) ;проміжний результат множення d4 db 48 dup(?) ;результат множення в 1 буфері temp1 dw 0 ;покажчик натискання ENTER temp2 dw 1 ;кількість введених байтів as: mov ax, cs mov ds, ax al1:mov ax, 03 int 10h ;виведемо інформацію про роботу lea dx, inf mov ah, 09h int 21h lea dx, lin mov ah, 09h int 21h ;виведемо інформацію про завдання роботи lea dx, zv mov ah, 09h int 21h sf: lea dx, lin mov ah, 09h int 21h ;почнемо вводити числа та дію між ними lea dx, gi mov ah, 09h int 21h vvod a1, a2 mov al, ' ' mov ah, 14 int 10h m10:mov ah, 0h int 16h cmp al, '+' jne j1 mov si, 1 ;якщо дія "+", збережемо 1 jmp m11 j1: cmp al, '-' jne m9 mov si, 3 ;якщо дія "-", збережемо 3 jmp m11 m9: cmp al, '*' jne m10 mov si, 2 ;якщо дія "*", збережемо 2 m11:mov ah, 14 int 10h mov al, ' ' mov ah, 14 int 10h ;сбережемо в стеку регістр si push si vvod b1, b2 pop si cmp si, 1 jne j3 jmp m13 j3: cmp si, 3 je j2 jmp m12 ;замінемо введені числа на розрядні сітки j2: mov al, 13 mov ah, 14 int 10h vuvod a1 mov ah, 09h lea dx, b int 21h mov dl, '.' mov ah, 02h int 21h vuvod a2 mov ah, 09h lea dx, b int 21h mov al, ' ' mov ah, 14 int 10h mov al, '-' mov ah, 14 int 10h mov al, ' ' mov ah, 14 int 10h vuvod b1 mov ah, 09h lea dx, b int 21h mov dl, '.' mov ah, 02h int 21h vuvod b2 mov ah, 09h lea dx, b int 21h
Решение задачи: «Найти часть кода, которая отвечает за ascii»
textual
Листинг программы
;виконаємо додавання введених чисел lea dx, ad ;указываем на строку-информ студ mov ah, 09h ;укажем на функцию вывода строки int 21h ;выполним vidnim vuvod c1 mov ah, 09h lea dx, b int 21h mov dl, '.' mov ah, 02h int 21h vuvod c2 mov ah, 09h lea dx, b int 21h jmp m14 m13:mov al, 13 mov ah, 14 int 10h vuvod a1 mov ah, 09h lea dx, b int 21h mov dl, '.' mov ah, 02h int 21h vuvod a2 mov ah, 09h lea dx, b int 21h mov al, ' ' mov ah, 14 int 10h mov al, '+' mov ah, 14 int 10h mov al, ' ' mov ah, 14 int 10h vuvod b1 mov ah, 09h lea dx, b int 21h mov dl, '.' mov ah, 02h int 21h vuvod b2 mov ah, 09h lea dx, b int 21h ;виконаємо додавання введених чисел lea dx, ad ;указываем на строку-информ студ mov ah, 09h ;укажем на функцию вывода строки int 21h ;выполним dodav vuvod c1 mov ah, 09h lea dx, b int 21h mov dl, '.' mov ah, 02h int 21h vuvod c2 mov ah, 09h lea dx, b int 21h jmp m14 ;якщо si=2 - виконаємо множення m12:mov al, 13 mov ah, 14 int 10h vuvod a1 mov ah, 09h lea dx, b int 21h mov dl, '.' mov ah, 02h int 21h vuvod a2 mov ah, 09h lea dx, b int 21h mov al, ' ' mov ah, 14 int 10h mov al, '*' mov ah, 14 int 10h mov al, ' ' mov ah, 14 int 10h vuvod b1 mov ah, 09h lea dx, b int 21h mov dl, '.' mov ah, 02h int 21h vuvod b2 mov ah, 09h lea dx, b int 21h lea dx, mn mov ah, 09h int 21h mnog ;після виконання дій - знову запустимо введення чисел m14:mov ah, 0h int 16h jmp sf mov ah, 4ch int 21h codseg ends end start