Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7856073
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 2, 20262026-06-02T20:34:54+00:00 2026-06-02T20:34:54+00:00

I have this problem with the code below which converts number to ASCII ‘number-text’.

  • 0

I have this problem with the code below which converts number to ASCII ‘number-text’. However the code seems to loop at the ‘div’ opcode

;Main Program
main:
    mov ax, 0x0000
    mov ds, ax ; setup data segment register
    mov si, GreetString ; setup data segment offset
    call print_string ; call print string procedure
    mov si, DataWord ; setup data segment offset
    mov bl, 0x000A ; base 10
    call format_string ; call format string procedure
    mov si, GreetString ; setup data segment offset
    call print_string ; call print string procedure
prevent_overflow:
    hlt ; halt the CPU
    jmp prevent_overflow

format_string:
mov ax, [ds:si] ; load register ax with data
xor cx, cx ; set counter to 0
mov si, GreetString ; set pointer to address of GreetString

.format_char:
div bl ; divides by register bl
add ah, 48 ; convert to ascii numeric
mov [ds:si], ah ; move ascii numeric to ds:si
inc cx ; increase counter
inc si ; increase si
xor ah, ah ; clear ah register
or ax, ax
jnz .format_char ; jump to format next char
ret

Any idea why does this happen? I say ‘loop’ because my CPU is at max-value and does not proceed with the opcodes after div

*Updated. Thanks newgre. Added main section to make it more readable (^.^)

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-02T20:34:56+00:00Added an answer on June 2, 2026 at 8:34 pm

    The problem is that you get a division overflow exception because the quotient (in my example below it’s 12345 div 10 = 1234 + remainder of 5) doesn’t fit into the 8 bits of al (remember that ah is already used by the remainder?).

    Every time either the quotient or the remainder doesn’t fit into the destination register you get a division overflow exception. It’s not only the division by 0 that causes it.

    You want to do a 32/16=16:16 division instead of a 16/8=8:8 division.

    Here’s what works in DOS with my changes (marked as ;;;):

    ; file: div2.asm
    ; compile as: nasm -f bin div2.asm -o div2.com
    org 0x100 ;;;
    
    ;Main Program
    main:
        mov ax, 0x0000
    ;    mov ds, ax ; setup data segment register ;;;
        mov si, GreetString ; setup data segment offset
        call print_string ; call print string procedure
        mov si, DataWord ; setup data segment offset
        mov bl, 0x000A ; base 10
        call format_string ; call format string procedure
        mov si, GreetString ; setup data segment offset
        call print_string ; call print string procedure
    
        ret ;;;
    
    prevent_overflow:
        hlt ; halt the CPU
        jmp prevent_overflow
    
    format_string:
    mov ax, [ds:si] ; load register ax with data
    xor cx, cx ; set counter to 0
    mov si, GreetString ; set pointer to address of GreetString
    
    .format_char:
    ; div bl ; divides by register bl ;;;
    xor dx, dx ;;;
    xor bh, bh ;;;
    div bx ;;;
    
    ; add ah, 48 ; convert to ascii numeric ;;;
    add dl, 48 ;;;
    
    ; mov [ds:si], ah ; move ascii numeric to ds:si ;;;
    mov [ds:si], dl ; move ascii numeric to ds:si
    
    inc cx ; increase counter
    inc si ; increase si
    ; xor ah, ah ; clear ah register ;;;
    or ax, ax
    jnz .format_char ; jump to format next char
    
    mov byte [ds:si], "$" ;;;
    inc cx ; increase counter ;;;
    inc si ; increase si ;;;
    
    ret
    
    print_string: ;;;
        pusha ;;;
        mov ah, 9 ;;;
        mov dx, si ;;;
        int 21h ;;;
        popa ;;;
        ret ;;;
    
    DataWord dw 12345 ;;;
    GreetString db "Hello World!", 13, 10, "$" ;;;
    

    It prints:

    Hello World!
    54321
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have this GWT code below which have some slight problem: It's either the
I have this code and can't figure out what seems to be the problem:
I have this sample code ( below ), example1() method works with no problem,
Never thought I'd have this problem :) The following snippet of code works in
ok i got this problem. i have this routes: (code bit change) File:/home/dotcloud/current/config/routes.js exports.routes
i am a beginner and i have a problem : this code doesnt compile
I have problem compilin this code..can anyone tell whats wrong with the syntax CREATE
I have problem with this code: file = tempfile.TemporaryFile(mode='wrb') file.write(base64.b64decode(data)) file.flush() os.fsync(file) # file.seek(0)
Hi i have problem with this code, i found it on the internet and
I have this code, but I have a problem. When I update but do

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.