Найти часть кода, которая отвечает за 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

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы