| | |
Sum of numbers will not display
![]() |
•
•
Join Date: Nov 2007
Posts: 5
Reputation:
Solved Threads: 0
I believe the disp_sum (last) call is incorrect because the program will execute but the sum will not be displayed.
Project is due tomorrow (11/27) so prompt assistance will be greatly appreciated
Thanks in advance!
; A Simple Calculator that performs basic arithmetic (+ - * /)
.model small
.stack 256
CR equ 13d
LF equ 10d
.data
promptNum1 db 'Please Enter The First Number:', 0 ;string terminated by 0
promptNum2 db CR, LF,'Please Enter The Second Number:',0 ;string terminated by 0
sum db CR, LF, 'The sum Of The Two Numbers Is:', 0 ;string terminated by 0
num1 dw ?
num2 dw ?
.code
start:
mov ax, @data ;set ds register to point to data segment
mov ds, ax ;since you cannot assign a segment to ds directy
mov ax, offset promptNum1 ;store memory address of promptNum1 in ax
call display_str ;calls the display_str to display promptNum1 string
call read_input ;read first number entered by user
mov num1, ax ;store the number entered by user into num1 variable
mov ax, offset promptNum2 ;store memory address of promptNum2 into ax
call display_str ;calls the display_str to display promptNum2 string
call read_input ;read second number entered by user
mov num2, ax ;store the second number entered by user into num2 variable
mov ax, offset sum ;store memory address of sum into ax
call display_str ;calls the display_str to display sum string
mov ax, num1 ; ax = num1 ;move contents of num1 variable to the ax register
add ax, num2 ; ax = ax + num2 ;add contents of num2 variable to the existing contents of ax
call putn ; display sum ;call putn function to display the value of sum
mov ax, 4c00h
int 21h ; finished, back to dos
display_str: ;definition of display_str which displays string terminated by 0
push ax ;save contents of register ax
push bx ;save contents of register bx
push cx ;save contents of register cx
push dx ;save contents of register dx
mov bx, ax ;store address in bx (required for display)
mov al, byte ptr [bx] ;copy address of first character in string to al register
display_loop: cmp al, 0 ;while loop, while al != 0
je display_rest ;if last result was 0, then go to display_restore
call disp_char ;display character, one at a time, while al != 0
inc bx ;loop control, bx = bx + 1
mov al, byte ptr [bx] ;display next character in string
jmp display_loop ;go back to beginning of loop
display_rest:
pop dx ;restore register to beginning value
pop cx ;restore register to beginning value
pop bx ;restore register to beginning value
pop ax ;restore register to beginning value
ret
disp_char: ;display character stored in al, called by display_loop
push ax ;save contents of register ax
push bx ;save contents of register bx
push cx ;save contents of register cx
push dx ;save contents of register dx
mov dl, al ;move contents of al into bl (required for display)
mov ah, 2h ;call DOS display subprogram
int 21h ;interrupt to call subprogram
pop dx ;restore register to beginning value
pop cx ;restore register to beginning value
pop bx ;restore register to beginning value
pop ax ;restore register to beginning value
ret
read_input: ;read character into al
mov ah, 1h ;call DOS input subprogram
int 21h ;interrupt to call subprogram
ret
disp_sum ; display string terminated by 0
; dx contains address of string
mov dh, ah
mov ah, 2h
int 21h
ret
end start
Project is due tomorrow (11/27) so prompt assistance will be greatly appreciated
Thanks in advance!
; A Simple Calculator that performs basic arithmetic (+ - * /)
.model small
.stack 256
CR equ 13d
LF equ 10d
.data
promptNum1 db 'Please Enter The First Number:', 0 ;string terminated by 0
promptNum2 db CR, LF,'Please Enter The Second Number:',0 ;string terminated by 0
sum db CR, LF, 'The sum Of The Two Numbers Is:', 0 ;string terminated by 0
num1 dw ?
num2 dw ?
.code
start:
mov ax, @data ;set ds register to point to data segment
mov ds, ax ;since you cannot assign a segment to ds directy
mov ax, offset promptNum1 ;store memory address of promptNum1 in ax
call display_str ;calls the display_str to display promptNum1 string
call read_input ;read first number entered by user
mov num1, ax ;store the number entered by user into num1 variable
mov ax, offset promptNum2 ;store memory address of promptNum2 into ax
call display_str ;calls the display_str to display promptNum2 string
call read_input ;read second number entered by user
mov num2, ax ;store the second number entered by user into num2 variable
mov ax, offset sum ;store memory address of sum into ax
call display_str ;calls the display_str to display sum string
mov ax, num1 ; ax = num1 ;move contents of num1 variable to the ax register
add ax, num2 ; ax = ax + num2 ;add contents of num2 variable to the existing contents of ax
call putn ; display sum ;call putn function to display the value of sum
mov ax, 4c00h
int 21h ; finished, back to dos
display_str: ;definition of display_str which displays string terminated by 0
push ax ;save contents of register ax
push bx ;save contents of register bx
push cx ;save contents of register cx
push dx ;save contents of register dx
mov bx, ax ;store address in bx (required for display)
mov al, byte ptr [bx] ;copy address of first character in string to al register
display_loop: cmp al, 0 ;while loop, while al != 0
je display_rest ;if last result was 0, then go to display_restore
call disp_char ;display character, one at a time, while al != 0
inc bx ;loop control, bx = bx + 1
mov al, byte ptr [bx] ;display next character in string
jmp display_loop ;go back to beginning of loop
display_rest:
pop dx ;restore register to beginning value
pop cx ;restore register to beginning value
pop bx ;restore register to beginning value
pop ax ;restore register to beginning value
ret
disp_char: ;display character stored in al, called by display_loop
push ax ;save contents of register ax
push bx ;save contents of register bx
push cx ;save contents of register cx
push dx ;save contents of register dx
mov dl, al ;move contents of al into bl (required for display)
mov ah, 2h ;call DOS display subprogram
int 21h ;interrupt to call subprogram
pop dx ;restore register to beginning value
pop cx ;restore register to beginning value
pop bx ;restore register to beginning value
pop ax ;restore register to beginning value
ret
read_input: ;read character into al
mov ah, 1h ;call DOS input subprogram
int 21h ;interrupt to call subprogram
ret
disp_sum ; display string terminated by 0
; dx contains address of string
mov dh, ah
mov ah, 2h
int 21h
ret
end start
Last edited by khalifah; Nov 26th, 2007 at 11:03 pm.
Actually, reading the forum rules and taking care to make sure that your post is presented in the best light (and not just dumped because you're in a hurry) is a good idea.
http://www.daniweb.com/forums/announcement125-3.html
http://www.daniweb.com/forums/announcement125-3.html
Sure it's dumped.
Compare your mess with the nicely formatted code here.
But anyway, it's now past your deadline, so it's a moot point.
Compare your mess with the nicely formatted code here.
But anyway, it's now past your deadline, so it's a moot point.
![]() |
Similar Threads
- add even (or odd) numbers from input (C++)
- Random Numbers on button (Java)
- Help on Emu8086 calculating Sum (Assembly)
- need help, need to generate 10 random numbers, such that their sum is less than 1 (C)
- Problem with user input (C++)
- Homework HELP!!! (Java)
- Functions and Array help (C++)
Other Threads in the Assembly Forum
- Previous Thread: Multiplying numbers in spim
- Next Thread: debugger code
| Thread Tools | Search this Thread |






