Results 1 to 3 of 3

Thread: What assembler is this for

  1. #1
    Join Date
    Feb 2011
    Location
    Great White North
    Beans
    128
    Distro
    Kubuntu 11.10 Oneiric Ocelot

    What assembler is this for

    Title says all. Can someone tell me what assembler to use for this code.
    Code:
    section .data
    
        ; Messages
    
        msg1        db        10,'-Calculator-',10,0
        lmsg1        equ        $ - msg1
    
        msg2        db        10,'Number 1: ',0
        lmsg2        equ        $ - msg2
    
        msg3        db        'Number 2: ',0
        lmsg3        equ        $ - msg3
    
        msg4        db        10,'1. Add',10,0
        lmsg4        equ        $ - msg4
    
        msg5        db        '2. Subtract',10,0
        lmsg5        equ        $ - msg5
    
        msg6        db        '3. Multiply',10,0
        lmsg6        equ        $ - msg6
    
        msg7        db        '4. Divide',10,0
        lmsg7        equ        $ - msg7
    
        msg8        db        'Operation: ',0
        lmsg8        equ        $ - msg8
    
        msg9        db        10,'Result: ',0
        lmsg9        equ        $ - msg9
    
        msg10        db        10,'Invalid Option',10,0
        lmsg10        equ        $ - msg10
    
        nlinea        db        10,10,0
        lnlinea        equ        $ - nlinea
    
    section .bss
        
        ; Spaces reserved for storing the values ​​provided by the user.
    
        opc            resb     2
        num1        resb    2
        num2        resb     2
        result        resb     2
    
    section .text
    
        global _start
    
    _start:
    
        ; Print on screen the message 1
        mov eax, 4
        mov ebx, 1
        mov ecx, msg1
        mov edx, lmsg1
        int 80h
    
        ; Print on screen the message 2
        mov eax, 4
        mov ebx, 1
        mov ecx, msg2
        mov edx, lmsg2
        int 80h
    
        ; We get num1 value.
        mov eax, 3
        mov ebx, 0
        mov ecx, num1
        mov edx, 2
        int 80h
    
        ; Print on screen the message 3
        mov eax, 4
        mov ebx, 1
        mov ecx, msg3
        mov edx, lmsg3
        int 80h
    
        ; We get num2 value.
        mov eax, 3
        mov ebx, 0
        mov ecx, num2
        mov edx, 2
        int 80h
    
        ; Print on screen the message 4
        mov eax, 4
        mov ebx, 1
        mov ecx, msg4
        mov edx, lmsg4
        int 80h
    
        ; Print on screen the message 5
        mov eax, 4
        mov ebx, 1
        mov ecx, msg5
        mov edx, lmsg5
        int 80h
    
        ; Print on screen the message 6
        mov eax, 4
        mov ebx, 1
        mov ecx, msg6
        mov edx, lmsg6
        int 80h
    
        ; Print on screen the message 7
        mov eax, 4
        mov ebx, 1
        mov ecx, msg7
        mov edx, lmsg7
        int 80h
    
        ; Print on screen the message 8
        mov eax, 4
        mov ebx, 1
        mov ecx, msg8
        mov edx, lmsg8
        int 80h
    
        ; We get the option selected.
        mov ebx,0
        mov ecx,opc
        mov edx,2
        mov eax,3
        int 80h
    
        mov ah, [opc]    ; Move the selected option to the registry ah
        sub ah, '0'        ; Convert from ascii to decimal
    
        ; We compare the value entered by the user to know what operation to perform.
    
        cmp ah, 1
        je add
        cmp ah, 2
        je subtract
        cmp ah, 3
        je multiply
        cmp ah, 4
        je divide
    
        ; If the value entered by the user does not meet any of the above 
        ; conditions then we show an error message and we close the program.
        mov eax, 4
        mov ebx, 1
        mov ecx, msg10
        mov edx, lmsg10
        int 80h
    
        jmp exit
    
    add:
        ; We keep the numbers in the registers eax and ebx
        mov eax, [num1]
        mov ebx, [num2]
    
        ; Convert from ascii to decimal
        sub eax, '0'
        sub ebx, '0'
    
        ; Add
        add eax, ebx
    
        ; Conversion from decimal to ascii
        add eax, '0'
    
        ; We move the result
        mov [result], eax
    
        ; Print on screen the message 9
        mov eax, 4
        mov ebx, 1
        mov ecx, msg9
        mov edx, lmsg9
        int 80h
    
        ; Print on screen the result
        mov eax, 4
        mov ebx, 1
        mov ecx, result
        mov edx, 1
        int 80h
    
        ; We end the program
        jmp exit
    
    subtract:
        ; We keep the numbers in the registers eax and ebx
        mov eax, [num1]
        mov ebx, [num2]
    
        ; Convert from ascii to decimal
        sub eax, '0'
        sub ebx, '0'
    
        ; Subtract
        sub eax, ebx
    
        ; Conversion from decimal to ascii
        add eax, '0'
    
        ; We move the result
        mov [result], eax
    
        ; Print on screen the message 9
        mov eax, 4
        mov ebx, 1
        mov ecx, msg9
        mov edx, lmsg9
        int 80h
    
        ; Print on screen the result
        mov eax, 4
        mov ebx, 1
        mov ecx, result
        mov edx, 1
        int 80h
    
        ; We end the program
        jmp exit
    
    multiply:
        
        ; We store the numbers in registers ax and bx
        mov ax, [num1]
        mov bx, [num2]
    
        ; Convert from ascii to decimal
        sub ax, '0'
        sub bx, '0'
    
        ; Multiply. AL = AX x BX
        mul bx
    
        ; Conversion from decimal to ascii
        add al, '0'
    
        ; We move the result
        mov [result], al
    
        ; Print on screen the message 9
        mov eax, 4
        mov ebx, 1
        mov ecx, msg9
        mov edx, lmsg9
        int 80h
    
        ; Print on screen the result
        mov eax, 4
        mov ebx, 1
        mov ecx, result
        mov edx, 1
        int 80h
    
        ; We end the program
        jmp exit
    
    divide:
        ; IN THIS LABEL IS THE ERROR!
        
        ; We store the numbers in registers ax and bx
        mov dx, 0
        mov ax, [num1]
        mov bx, [num2]
    
        ; Convert from ascii to decimall
        sub ax, '0'
        sub bx, '0'
        ; Division. AX = DX:AX / BX
        div bx
    
        ; Conversion from decimal to ascii
        add ax, '0'
        ; We move the result
        mov [result], ax
    
        ; Print on screen the message 9
        mov eax, 4
        mov ebx, 1
        mov ecx, msg9
        mov edx, lmsg9
        int 80h
    
        ; Print on screen the result
        ; ALWAYS PRINTS 1
        mov eax, 4
        mov ebx, 1
        mov ecx, result
        mov edx, 1
        int 80h
    
        ; We end the program
        jmp exit
        
    exit:
        ; Print on screen two new lines
        mov eax, 4
        mov ebx, 1
        mov ecx, nlinea
        mov edx, lnlinea
        int 80h
        ; End the program
        mov eax, 1
        mov ebx, 0
        int 80h
    Last edited by alegomaster; February 25th, 2012 at 02:32 AM.
    VHDL and C FTW

    Designing a custom CPU based on MIPS

  2. #2
    Join Date
    Sep 2009
    Location
    Canada, Montreal QC
    Beans
    1,809
    Distro
    Ubuntu 11.10 Oneiric Ocelot

    Re: What assembler is this for

    It looks very similar to the little NASM I have played with in the past.

    You can download it from the repos.
    I know not with what weapons World War III will be fought, but World War IV will be fought with sticks and stones.
    Freedom is measured in Stallmans.
    Projects: gEcrit

  3. #3
    Join Date
    Feb 2011
    Location
    Great White North
    Beans
    128
    Distro
    Kubuntu 11.10 Oneiric Ocelot

    Re: What assembler is this for

    Thanks. It is NASM
    VHDL and C FTW

    Designing a custom CPU based on MIPS

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •