What does this code does with comments for each line please.? Explain the logic of the program how it achieves its purpose.   .model small  .386  .stack 100h  .data  msg1 db 13, 10, "Enter any number --> ", "$" msg2 db  "Enter an operation +,- * or /  --> ",13, 10, "$" msg3 db  "The Operation is --> ", "$" msg4 db  "The result is --> ", "$" By_base dd 21 by_10 dd 10   sp_counter db 0  disp_number dd 0  disp_number2 dd 0 disp_number3 dd 0 op_type db 0 last_key dd 0  remainder db 0 .code  main proc     mov ax,@data      mov ds,ax         mov dx,offset msg1     call display_message     call m_keyin          call operation     mov dx,offset msg1     call display_message     call m_keyin     cmp op_type, "+"     jnz short skip_plus          call op_plus          skiP_plus:     cmp op_type, "-"     jnz short skip_minus     call op_minus      skip_minus:          cmp op_type, "*"     jnz short skip_mul          call op_mult      skip_mul: cmp op_type, "/"     jnz short skip_div          call op_div skip_div:         call m_display mov ax, 4c00h  int 21h  operation proc     mov dx,offset msg2 rpt4:     call display_message     mov dx,offset msg3     call display_message     mov ah, 1     int 21h     cmp al, 30h     jns rpt4     mov op_type, al           ret operation endp m_display proc     mov dx,offset msg4     call display_message     mov eax, disp_number     mov sp_counter, 0     Base_lp: LP1:     mov edx, 0     div By_Base     push dx     inc sp_counter     cmp eax, 0     jnz lp1 LP2:     pop dx     call display     dec sp_counter     jnz lp2     mov edx, -8     call display     mov edx, by_base     call display     mov edx, -7     call display      dec By_base     mov eax, disp_number     cmp By_base, 1     jnz Base_lp          ret      m_display endp op_minus proc     mov eax, disp_number2     sub eax, disp_number3     mov disp_number, eax     ret op_minus endp     op_div proc mov eax, disp_number2 div disp_number3 mov disp_number, eax mov remainder, dl call display call m_display mov dl, -16 call display mov dl, remainder call display mov dl, -1 call display mov edx, disp_number3 call display mov ax, 4c00h  int 21h  op_div endp op_mult proc     mov eax, disp_number2     mul disp_number3     mov disp_number, eax ret op_mult endp op_plus proc     mov eax, disp_number2     add eax, disp_number3     mov disp_number, eax     ret op_plus endp display proc     add dl, 30h     cmp dl, 3ah     js short skip_hex     add dl, 7 Skip_hex:           mov ah, 6     int 21h     ret     display endp display_message proc     mov ah, 9      int 21h     mov edx, 0     ret display_message endp      m_keyin proc     MOV disp_number, 0     mov last_key, 0 LP_key:; location in the program label     mov eax, disp_number     mul by_10  ; eax = (eax) * 10     add eax, last_key     mov DISP_NUMBER, eax            mov ah, 1      int 21h     AND eax, 000000ffh     cmp al, 13      jz short finkey      sub al, 30h       MOV LAST_KEY, EAX       jmp lp_key       finkey:         MOV eax, DISP_NUMBER     cmp DISP_NUMBER2,0     jnz short skip     MOV DISP_NUMBER2, EAX skip:     MOV DISP_NUMBER3, EAX     ret m_keyin endp main endp end main

C++ for Engineers and Scientists
4th Edition
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Bronson, Gary J.
Chapter7: Arrays
Section: Chapter Questions
Problem 8PP: (Statistical) In many statistical analysis programs, data values considerably outside the range of...
icon
Related questions
Question

What does this code does with comments for each line please.?

Explain the logic of the program how it achieves its purpose.

 

.model small 
.386 
.stack 100h 

.data 
msg1 db 13, 10, "Enter any number --> ", "$"
msg2 db  "Enter an operation +,- * or /  --> ",13, 10, "$"
msg3 db  "The Operation is --> ", "$"
msg4 db  "The result is --> ", "$"
By_base dd 21
by_10 dd 10  
sp_counter db 0 
disp_number dd 0 
disp_number2 dd 0
disp_number3 dd 0
op_type db 0
last_key dd 0 
remainder db 0
.code 

main proc
    mov ax,@data 
    mov ds,ax
        mov dx,offset msg1
    call display_message

    call m_keyin
    
    call operation
    mov dx,offset msg1
    call display_message

    call m_keyin
    cmp op_type, "+"
    jnz short skip_plus
    
    call op_plus
    
    skiP_plus:
    cmp op_type, "-"
    jnz short skip_minus
    call op_minus
    
skip_minus:
    
    cmp op_type, "*"
    jnz short skip_mul
    
    call op_mult
    
skip_mul:
cmp op_type, "/"
    jnz short skip_div
    
    call op_div
skip_div:    
    call m_display
mov ax, 4c00h 
int 21h 

operation proc
    mov dx,offset msg2
rpt4:
    call display_message
    mov dx,offset msg3
    call display_message
    mov ah, 1
    int 21h
    cmp al, 30h
    jns rpt4
    mov op_type, al
    
    
ret
operation endp

m_display proc
    mov dx,offset msg4
    call display_message
    mov eax, disp_number
    mov sp_counter, 0    

Base_lp:

LP1:
    mov edx, 0
    div By_Base
    push dx
    inc sp_counter
    cmp eax, 0
    jnz lp1

LP2:
    pop dx
    call display
    dec sp_counter
    jnz lp2
    mov edx, -8
    call display
    mov edx, by_base
    call display
    mov edx, -7
    call display
     dec By_base
    mov eax, disp_number
    cmp By_base, 1
    jnz Base_lp
    
    ret
    
m_display endp

op_minus proc
    mov eax, disp_number2
    sub eax, disp_number3
    mov disp_number, eax
    ret
op_minus endp    
op_div proc

mov eax, disp_number2
div disp_number3
mov disp_number, eax
mov remainder, dl

call display
call m_display
mov dl, -16
call display

mov dl, remainder
call display
mov dl, -1
call display
mov edx, disp_number3

call display


mov ax, 4c00h 
int 21h 
op_div endp

op_mult proc
    mov eax, disp_number2
    mul disp_number3
    mov disp_number, eax

ret
op_mult endp
op_plus proc
    mov eax, disp_number2
    add eax, disp_number3
    mov disp_number, eax
    ret
op_plus endp
display proc
    add dl, 30h
    cmp dl, 3ah
    js short skip_hex
    add dl, 7
Skip_hex:
     
    mov ah, 6
    int 21h
    ret
    display endp

display_message proc
    mov ah, 9 
    int 21h
    mov edx, 0
    ret
display_message endp
    
m_keyin proc
    MOV disp_number, 0
    mov last_key, 0
LP_key:; location in the program label
    mov eax, disp_number
    mul by_10  ; eax = (eax) * 10
    add eax, last_key
    mov DISP_NUMBER, eax  
    
    mov ah, 1 
    int 21h
    AND eax, 000000ffh
    cmp al, 13 
    jz short finkey 
    sub al, 30h  
    MOV LAST_KEY, EAX  
    jmp lp_key  
    finkey:    
    MOV eax, DISP_NUMBER
    cmp DISP_NUMBER2,0
    jnz short skip
    MOV DISP_NUMBER2, EAX
skip:
    MOV DISP_NUMBER3, EAX
    ret
m_keyin endp


main endp
end main

 

Expert Solution
steps

Step by step

Solved in 4 steps with 2 images

Blurred answer
Knowledge Booster
Array
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
C++ for Engineers and Scientists
C++ for Engineers and Scientists
Computer Science
ISBN:
9781133187844
Author:
Bronson, Gary J.
Publisher:
Course Technology Ptr
Microsoft Visual C#
Microsoft Visual C#
Computer Science
ISBN:
9781337102100
Author:
Joyce, Farrell.
Publisher:
Cengage Learning,
EBK JAVA PROGRAMMING
EBK JAVA PROGRAMMING
Computer Science
ISBN:
9781337671385
Author:
FARRELL
Publisher:
CENGAGE LEARNING - CONSIGNMENT
Programming Logic & Design Comprehensive
Programming Logic & Design Comprehensive
Computer Science
ISBN:
9781337669405
Author:
FARRELL
Publisher:
Cengage