fatal error A1010 in masm, but not tasm 
Author Message
 fatal error A1010 in masm, but not tasm

Hi,

I get the following error message when using masm but not tasm, and the
program is written in masm syntax, not tasm ideal mode, and the output after
assembling and linking with tasm makes sense. The answer's probably pretty
simple, but I don't see it, so thanks for any help you can offer me.  What's
fatal error A1010: unmatched block nesting?  That couldn't have anything to
do with indenting the code, could it?

Thank you,

Steve Gallo

---------------------------------------------

C:\masm614\MyProjects>masm p7.asm
Microsoft (R) MASM Compatibility Driver
Copyright (C) Microsoft Corp 1993.  All rights reserved.

 Invoking: ML.EXE /I. /Zm /c /Ta p7.asm

Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: p7.asm
cs25a.mac(30) : fatal error A1010: unmatched block nesting

C:\masm614\MyProjects>

The Macro cs32a.mac looks like this:
( the program is below the macro)
;**********************************************

CR              equ     13
LF              equ     10
TRUE            equ     1
FALSE           equ     0

InChNE          macro   Char            ;Input Hex Char NO Echo
                       mov     ah,8
                       int     21h
                       ifnb    <Char>
                      mov     Char,al
                      endif
                     endm

InChar          macro   Char            ;Input a Char
                    mov     ah,1
                    int     21h
                    ifnb    <Char>
                    mov     Char,al
                    endif
                    endm

Cvt2Bin         macro   HexDig          ;Convert Hex to Binary
                     local   skip
                    sub     al,30h
                    cmp     al,9
                    jle     skip
                    sub     al,7
skip:             ifnb    <HexDig>
                    mov     HexDig,al
                    endif
                    endm

InHex           macro   HexDig          ;Input Hex Digit
                    InChar
                    Cvt2Bin HexDig
                    endm

Cvt2Ch        macro   HexDig          ;Convert Hex to Char
                    local   skip
                    ifnb    <HexDig>
                    mov     dl,HexDig
                    endif
                    add     dl,30h
                    cmp     dl,'9'
                    jle     skip
                    add     dl,7
skip:
                    endm

OutChar      macro   Char            ;Output Char
                    ifnb    <Char>
                    mov     dl,Char
                    endif
                    mov     ah,2
                    int     21h
                    endm

OutHex     macro   HexDig          ;Output Hex Digit
                Cvt2Ch  HexDig
                OutChar
                endm

OutStr     macro   Str             ;Output a Char String
                mov     ah,9
                lea     dx,str
                int     21h
               endm

ScrScrn   macro   LineCt, ULRow, ULCol, LRRow, LRCol      ;Scroll Screen
                ifnb    <LineCt>
                mov     ch,ULRow
                endif

                ifnb    <ULRow>
                mov     ch,ULRow
                endif

                ifnb    <ULCol>
                mov     cl,ULCol
                endif

                ifnb    <LRRow>
                mov     dh,LRRow
                endif

                ifnb    <LRCol>
                mov     dl,LRCol
                endif

                mov     bh,7
                int     10h
                endm

ClrScrn    macro                   ;Clear Screen
                ScrScrn 0,0,0,18H,4FH
                endm


                mov ah,2

                ifnb    <Row>
                mov     dh,Row
                endif

                ifnb    <Col>
                mov     dl,Col
                endif

                mov     bh,0
                int     10h
                endm

;************************************************************

; The program p7.asm looks like the following:

; Name: Steven Gallo
; Assignment Number: 07
; File Name: P7.ASM
; Program Description: P7.ASM prints the sum of five decimal numbers of at
most
; 3 digits in length using the while loop structure.  The sum of the digits
in
; each column must lie between 0 and 9, inclusive, in order for the results
to
; make sense.

Title   P7.ASM: Adds Five Decimal Numbers Of At Most Three Digits In Length

.model  small

.stack  100h

include cs25a.mac                       ;InChNE, OutChar, OutStr, CR, LF

.data
In_Prompt         db      "Enter five 3-digit decimal numbers:",CR,LF,'$'
Out_Symbol      db      "      +______",CR,LF,'$'
BlankSpaces     db      "         ",'$'
Sum                  dw      ?
Num                 dw      ?
Base                 dw      10
Dig                   db      ?
NumCount        db      ?
DigCount          db      ?

.code
init            proc                    ;Start


                mov     ds,ax

                call    main

                mov     ah,4ch          ;Return to DOS
                mov     al,0            ;Set error code
                int        21h

init            endp                    ;End

main            proc                    ;Enter

                OutStr  In_Prompt       ;Print "Enter 5 3-digit decimal
numbers"
                OutChar CR              ;Print CR
                OutChar LF              ;Print LF

                mov     Sum,0           ;Sum = 0
                mov     NumCount,0      ;NumCount = 0
while_1:                                ;WHILE NumCount < 5
                cmp     NumCount,5
                jae     endwhile_1

                OutStr BlankSpaces      ;       Print a Blank Spaces

                call    InDecNum        ;       Input Num

                mov     ax,Num          ;       Sum = Sum + Num
                add     Sum,ax

                inc     NumCount        ;       NumCount = NumCount + 1

                jmp     while_1
endwhile_1:                             ;ENDWHILE
                OutStr  Out_Symbol      ;Print "       +____ "
                OutChar CR              ;Print CR
                OutChar LF              ;Print LF

                OutStr  BlankSpaces     ;Print Blank Spaces

                                        ;Base = 10
                call    OutBaseSum      ;Print Sum in Base 10 (Decimal)

                OutChar CR              ;Print CR
                OutChar LF              ;Print LF

                ret                     ;Stop
main            endp                    ;Exit

InDecNum        proc                    ;Inputs A Valid Decimal Number
3-Digits
                                        ;or less, left-justified
                mov     Num,0           ;Num = 0
                mov     Digcount,0      ;DigCount = 0

                InChNE  Dig             ;Input Dig No Echo
repeat_1:                                   ;REPEAT
                cmp     Dig,'0'            ;   IF Dig >= '0' AND Dig <= '9'
                jnae    Invalid_Dig
                cmp     Dig,'9'
                jnbe    Invalid_Dig

                OutChar  Dig               ;       Print Dig (Echo Dig to
Screen)
                sub     Dig,'0'               ;       Dig = Dig - '0'

                mov     ax,Num           ;       Num = Num*10 + Dig
                mul     Base
                mov     bl,Dig
                mov     bh,0
                add     ax,bx
                mov     Num,ax

                inc     DigCount           ;       DigCount = DigCount + 1

                InChNE  Dig              ;       Input Dig No Echo
                                                  ;   ENDIF
                cmp     DigCount,3     ;UNTIL Dig = CR OR DigCount >= 3
                jnb     until_1
                cmp     al,CR
                jne     repeat_1
                jmp     until_1
Invalid_Dig:
                OutChar 7               ;Print Bell
                InChNE  Dig             ;Input Dig No Echo
                jmp     repeat_1        ;
until_1:
                OutChar CR              ;Print CR
                OutChar LF              ;Print LF

                ret                             ;Stop
InDecNum        endp                 ;Exit

OutBaseSum      proc                    ;Convert binary to char, then print
a
                                        ;3-digit-or-less number to any base.
                mov     ax,Sum          ;AX = Sum
                mov     DigCount,0      ;DigCount = 0
repeat_2:                               ;REPEAT
                mov     dx,0            ;       DX = 0
                div     Base            ;       DX = AX mod Base
                                        ;       AX = AX div Base
                push    dx              ;       Store DX (or PUSH DX)
                inc     DigCount        ;       DigCount = DigCount + 1
                cmp     ax,0            ;UNTIL AX = 0
                jne     repeat_2

                mov     ah,2
while_3:                                ;WHILE DigCount > 0
                cmp     DigCount,0
                jna     endwhile_3
                pop     dx              ;       Restore DX (or POP DX)
                add     dx,'0'          ;       DX = DX + '0'
                int     21h             ;       Print DX
                dec     DigCount        ;       DigCount = DigCount - 1
                jmp     while_3
endwhile_3:                             ;ENDWHILE

                                        ;ENDIF
                ret                     ;Stop
OutBaseSum      endp                    ;Exit
                end     init            ;END

;****************************[end of macro cs25a.asm]***************



Tue, 29 Jul 2003 19:15:21 GMT  
 fatal error A1010 in masm, but not tasm
Hi,

I get the following error message when using masm but not tasm, and the
program is written in masm syntax, not tasm ideal mode, and the output after
assembling and linking with tasm makes sense. The answer's probably pretty
simple, but I don't see it, so thanks for any help you can offer me.  What's
fatal error A1010: unmatched block nesting?  That couldn't have anything to
do with indenting the code, could it?

Thank you,

Steve Gallo

---------------------------------------------

C:\masm614\MyProjects>masm p7.asm
Microsoft (R) MASM Compatibility Driver
Copyright (C) Microsoft Corp 1993.  All rights reserved.

 Invoking: ML.EXE /I. /Zm /c /Ta p7.asm

Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: p7.asm
cs25a.mac(30) : fatal error A1010: unmatched block nesting

C:\masm614\MyProjects>

The Macro cs32a.mac looks like this:
( the program is below the macro)
;**********************************************

CR              equ     13
LF              equ     10
TRUE            equ     1
FALSE           equ     0

InChNE          macro   Char            ;Input Hex Char NO Echo
                       mov     ah,8
                       int     21h
                       ifnb    <Char>
                      mov     Char,al
                      endif
                     endm

InChar          macro   Char            ;Input a Char
                    mov     ah,1
                    int     21h
                    ifnb    <Char>
                    mov     Char,al
                    endif
                    endm

Cvt2Bin         macro   HexDig          ;Convert Hex to Binary
                     local   skip
                    sub     al,30h
                    cmp     al,9
                    jle     skip
                    sub     al,7
skip:             ifnb    <HexDig>
                    mov     HexDig,al
                    endif
                    endm

InHex           macro   HexDig          ;Input Hex Digit
                    InChar
                    Cvt2Bin HexDig
                    endm

Cvt2Ch        macro   HexDig          ;Convert Hex to Char
                    local   skip
                    ifnb    <HexDig>
                    mov     dl,HexDig
                    endif
                    add     dl,30h
                    cmp     dl,'9'
                    jle     skip
                    add     dl,7
skip:
                    endm

OutChar      macro   Char            ;Output Char
                    ifnb    <Char>
                    mov     dl,Char
                    endif
                    mov     ah,2
                    int     21h
                    endm

OutHex     macro   HexDig          ;Output Hex Digit
                Cvt2Ch  HexDig
                OutChar
                endm

OutStr     macro   Str             ;Output a Char String
                mov     ah,9
                lea     dx,str
                int     21h
               endm

ScrScrn   macro   LineCt, ULRow, ULCol, LRRow, LRCol      ;Scroll Screen
                ifnb    <LineCt>
                mov     ch,ULRow
                endif

                ifnb    <ULRow>
                mov     ch,ULRow
                endif

                ifnb    <ULCol>
                mov     cl,ULCol
                endif

                ifnb    <LRRow>
                mov     dh,LRRow
                endif

                ifnb    <LRCol>
                mov     dl,LRCol
                endif

                mov     bh,7
                int     10h
                endm

ClrScrn    macro                   ;Clear Screen
                ScrScrn 0,0,0,18H,4FH
                endm


                mov ah,2

                ifnb    <Row>
                mov     dh,Row
                endif

                ifnb    <Col>
                mov     dl,Col
                endif

                mov     bh,0
                int     10h
                endm

;************************************************************

; The program p7.asm looks like the following:

; Name: Steven Gallo
; Assignment Number: 07
; File Name: P7.ASM
; Program Description: P7.ASM prints the sum of five decimal numbers of at
most
; 3 digits in length using the while loop structure.  The sum of the digits
in
; each column must lie between 0 and 9, inclusive, in order for the results
to
; make sense.

Title   P7.ASM: Adds Five Decimal Numbers Of At Most Three Digits In Length

.model  small

.stack  100h

include cs25a.mac                       ;InChNE, OutChar, OutStr, CR, LF

.data
In_Prompt         db      "Enter five 3-digit decimal numbers:",CR,LF,'$'
Out_Symbol      db      "      +______",CR,LF,'$'
BlankSpaces     db      "         ",'$'
Sum                  dw      ?
Num                 dw      ?
Base                 dw      10
Dig                   db      ?
NumCount        db      ?
DigCount          db      ?

.code
init            proc                    ;Start


                mov     ds,ax

                call    main

                mov     ah,4ch          ;Return to DOS
                mov     al,0            ;Set error code
                int        21h

init            endp                    ;End

main            proc                    ;Enter

                OutStr  In_Prompt       ;Print "Enter 5 3-digit decimal
numbers"
                OutChar CR              ;Print CR
                OutChar LF              ;Print LF

                mov     Sum,0           ;Sum = 0
                mov     NumCount,0      ;NumCount = 0
while_1:                                ;WHILE NumCount < 5
                cmp     NumCount,5
                jae     endwhile_1

                OutStr BlankSpaces      ;       Print a Blank Spaces

                call    InDecNum        ;       Input Num

                mov     ax,Num          ;       Sum = Sum + Num
                add     Sum,ax

                inc     NumCount        ;       NumCount = NumCount + 1

                jmp     while_1
endwhile_1:                             ;ENDWHILE
                OutStr  Out_Symbol      ;Print "       +____ "
                OutChar CR              ;Print CR
                OutChar LF              ;Print LF

                OutStr  BlankSpaces     ;Print Blank Spaces

                                        ;Base = 10
                call    OutBaseSum      ;Print Sum in Base 10 (Decimal)

                OutChar CR              ;Print CR
                OutChar LF              ;Print LF

                ret                     ;Stop
main            endp                    ;Exit

InDecNum        proc                    ;Inputs A Valid Decimal Number
3-Digits
                                        ;or less, left-justified
                mov     Num,0           ;Num = 0
                mov     Digcount,0      ;DigCount = 0

                InChNE  Dig             ;Input Dig No Echo
repeat_1:                                   ;REPEAT
                cmp     Dig,'0'            ;   IF Dig >= '0' AND Dig <= '9'
                jnae    Invalid_Dig
                cmp     Dig,'9'
                jnbe    Invalid_Dig

                OutChar  Dig               ;       Print Dig (Echo Dig to
Screen)
                sub     Dig,'0'               ;       Dig = Dig - '0'

                mov     ax,Num           ;       Num = Num*10 + Dig
                mul     Base
                mov     bl,Dig
                mov     bh,0
                add     ax,bx
                mov     Num,ax

                inc     DigCount           ;       DigCount = DigCount + 1

                InChNE  Dig              ;       Input Dig No Echo
                                                  ;   ENDIF
                cmp     DigCount,3     ;UNTIL Dig = CR OR DigCount >= 3
                jnb     until_1
                cmp     al,CR
                jne     repeat_1
                jmp     until_1
Invalid_Dig:
                OutChar 7               ;Print Bell
                InChNE  Dig             ;Input Dig No Echo
                jmp     repeat_1        ;
until_1:
                OutChar CR              ;Print CR
                OutChar LF              ;Print LF

                ret                             ;Stop
InDecNum        endp                 ;Exit

OutBaseSum      proc                    ;Convert binary to char, then print
a
                                        ;3-digit-or-less number to any base.
                mov     ax,Sum          ;AX = Sum
                mov     DigCount,0      ;DigCount = 0
repeat_2:                               ;REPEAT
                mov     dx,0            ;       DX = 0
                div     Base            ;       DX = AX mod Base
                                        ;       AX = AX div Base
                push    dx              ;       Store DX (or PUSH DX)
                inc     DigCount        ;       DigCount = DigCount + 1
                cmp     ax,0            ;UNTIL AX = 0
                jne     repeat_2

                mov     ah,2
while_3:                                ;WHILE DigCount > 0
                cmp     DigCount,0
                jna     endwhile_3
                pop     dx              ;       Restore DX (or POP DX)
                add     dx,'0'          ;       DX = DX + '0'
                int     21h             ;       Print DX
                dec     DigCount        ;       DigCount = DigCount - 1
                jmp     while_3
endwhile_3:                             ;ENDWHILE

                                        ;ENDIF
                ret                     ;Stop
OutBaseSum      endp                    ;Exit
                end     init            ;END

;****************************[end of macro cs25a.asm]***************



Tue, 29 Jul 2003 19:17:46 GMT  
 fatal error A1010 in masm, but not tasm

Quote:
> cs25a.mac(30) : fatal error A1010: unmatched block nesting

Hehe.... that's why I don't use MASM:-P.

Quote:
> InChNE          macro   Char            ;Input Hex Char NO Echo
>                        mov     ah,8
>                        int     21h
>                        ifnb    <Char>
>                       mov     Char,al
>                       endif
>                      endm

InChNE endm - not lonely endm.

Quote:
> InChar          macro   Char            ;Input a Char
>                     mov     ah,1
>                     int     21h
>                     ifnb    <Char>
>                     mov     Char,al
>                     endif
>                     endm

InChar endm - not only lonely endm.

Quote:
> Cvt2Bin         macro   HexDig          ;Convert Hex to Binary
>                      local   skip
>                     sub     al,30h
>                     cmp     al,9
>                     jle     skip
>                     sub     al,7
> skip:             ifnb    <HexDig>
>                     mov     HexDig,al
>                     endif
>                     endm

Cvt2Bin endm.

Quote:
> InHex           macro   HexDig          ;Input Hex Digit
>                     InChar
>                     Cvt2Bin HexDig
>                     endm

InHex endm.

Etc, etc....

--
Best regards - TiR 2000 - GG# 413992
Konserwatywna Unia Realizacji Webmasterskich Ambicji

My email addy - tir2000<at>wot.SPAM.com.SUCKS.pl.ASS
TiRNet Service - http://www.tir2000.prv.pl



Wed, 30 Jul 2003 18:33:26 GMT  
 fatal error A1010 in masm, but not tasm
Actually, that doesn't work...for some peculiar reason, you can put labels
on "proc"/"endp", "segment"/"ends", etc. but if you do this with
"macro"/"endm" it complains...you have to use lonely "endm"s...I have no
idea why this is but that's what it insists upon...

Beth :)


Quote:

> > cs25a.mac(30) : fatal error A1010: unmatched block nesting

> Hehe.... that's why I don't use MASM:-P.

> > InChNE          macro   Char            ;Input Hex Char NO Echo
> >                        mov     ah,8
> >                        int     21h
> >                        ifnb    <Char>
> >                       mov     Char,al
> >                       endif
> >                      endm

> InChNE endm - not lonely endm.

> > InChar          macro   Char            ;Input a Char
> >                     mov     ah,1
> >                     int     21h
> >                     ifnb    <Char>
> >                     mov     Char,al
> >                     endif
> >                     endm

> InChar endm - not only lonely endm.

> > Cvt2Bin         macro   HexDig          ;Convert Hex to Binary
> >                      local   skip
> >                     sub     al,30h
> >                     cmp     al,9
> >                     jle     skip
> >                     sub     al,7
> > skip:             ifnb    <HexDig>
> >                     mov     HexDig,al
> >                     endif
> >                     endm

> Cvt2Bin endm.

> > InHex           macro   HexDig          ;Input Hex Digit
> >                     InChar
> >                     Cvt2Bin HexDig
> >                     endm

> InHex endm.

> Etc, etc....

> --
> Best regards - TiR 2000 - GG# 413992
> Konserwatywna Unia Realizacji Webmasterskich Ambicji

> My email addy - tir2000<at>wot.SPAM.com.SUCKS.pl.ASS
> TiRNet Service - http://www.tir2000.prv.pl



Thu, 31 Jul 2003 11:03:51 GMT  
 fatal error A1010 in masm, but not tasm

Quote:

>cs25a.mac(30) : fatal error A1010: unmatched block nesting
>Cvt2Bin         macro   HexDig          ;Convert Hex to Binary
>                     local   skip
>                    sub     al,30h
>                    cmp     al,9
>                    jle     skip
>                    sub     al,7
>skip:             ifnb    <HexDig>    
>                    mov     HexDig,al
>                    endif                   ; <-- this is line 30
>                    endm

The problem is the skip: line.  Rewrite it to be two lines as follows

skip:
        ifnb    <HexDig>

and I think you'll find that MASM likes it that way.

Ed



Fri, 01 Aug 2003 04:19:37 GMT  
 fatal error A1010 in masm, but not tasm
Thanks, that does the trick. Make that change and now my program works under
both tasm and masm.  And now, it's onto bigger and better digit-adding
programs!

Thanks again to everyone who looked at my code and offered suggestions.  I
really appreciate it. Someday I hope I'll be able to return the favor.
Gotta read those asm books and write some more code first!

Sincerely,

Steve Gallo

Quote:
----- Original Message -----

Newsgroups: alt.lang.asm
Sent: Sunday, February 11, 2001 12:19 PM
Subject: Re: fatal error A1010 in masm, but not tasm


> >cs25a.mac(30) : fatal error A1010: unmatched block nesting

> >Cvt2Bin         macro   HexDig          ;Convert Hex to Binary
> >                     local   skip
> >                    sub     al,30h
> >                    cmp     al,9
> >                    jle     skip
> >                    sub     al,7
> >skip:             ifnb    <HexDig>
> >                    mov     HexDig,al
> >                    endif ; <-- this is line 30
> >                    endm

> The problem is the skip: line.  Rewrite it to be two lines as follows

> skip:
> ifnb <HexDig>

> and I think you'll find that MASM likes it that way.

> Ed


> Hi,

> I get the following error message when using masm but not tasm, and the
> program is written in masm syntax, not tasm ideal mode, and the output
after
> assembling and linking with tasm makes sense. The answer's probably pretty
> simple, but I don't see it, so thanks for any help you can offer me.
What's
> fatal error A1010: unmatched block nesting?  That couldn't have anything
to
> do with indenting the code, could it?

> Thank you,

> Steve Gallo

> ---------------------------------------------

> C:\masm614\MyProjects>masm p7.asm
> Microsoft (R) MASM Compatibility Driver
> Copyright (C) Microsoft Corp 1993.  All rights reserved.

>  Invoking: ML.EXE /I. /Zm /c /Ta p7.asm

> Microsoft (R) Macro Assembler Version 6.14.8444
> Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

>  Assembling: p7.asm
> cs25a.mac(30) : fatal error A1010: unmatched block nesting

> C:\masm614\MyProjects>

> The Macro cs32a.mac looks like this:
> ( the program is below the macro)
> ;**********************************************

> CR              equ     13
> LF              equ     10
> TRUE            equ     1
> FALSE           equ     0

> InChNE          macro   Char            ;Input Hex Char NO Echo
>                        mov     ah,8
>                        int     21h
>                        ifnb    <Char>
>                       mov     Char,al
>                       endif
>                      endm

> InChar          macro   Char            ;Input a Char
>                     mov     ah,1
>                     int     21h
>                     ifnb    <Char>
>                     mov     Char,al
>                     endif
>                     endm

> Cvt2Bin         macro   HexDig          ;Convert Hex to Binary
>                      local   skip
>                     sub     al,30h
>                     cmp     al,9
>                     jle     skip
>                     sub     al,7
> skip:             ifnb    <HexDig>
>                     mov     HexDig,al
>                     endif
>                     endm

> InHex           macro   HexDig          ;Input Hex Digit
>                     InChar
>                     Cvt2Bin HexDig
>                     endm

> Cvt2Ch        macro   HexDig          ;Convert Hex to Char
>                     local   skip
>                     ifnb    <HexDig>
>                     mov     dl,HexDig
>                     endif
>                     add     dl,30h
>                     cmp     dl,'9'
>                     jle     skip
>                     add     dl,7
> skip:
>                     endm

> OutChar      macro   Char            ;Output Char
>                     ifnb    <Char>
>                     mov     dl,Char
>                     endif
>                     mov     ah,2
>                     int     21h
>                     endm

> OutHex     macro   HexDig          ;Output Hex Digit
>                 Cvt2Ch  HexDig
>                 OutChar
>                 endm

> OutStr     macro   Str             ;Output a Char String
>                 mov     ah,9
>                 lea     dx,str
>                 int     21h
>                endm

> ScrScrn   macro   LineCt, ULRow, ULCol, LRRow, LRCol      ;Scroll Screen
>                 ifnb    <LineCt>
>                 mov     ch,ULRow
>                 endif

>                 ifnb    <ULRow>
>                 mov     ch,ULRow
>                 endif

>                 ifnb    <ULCol>
>                 mov     cl,ULCol
>                 endif

>                 ifnb    <LRRow>
>                 mov     dh,LRRow
>                 endif

>                 ifnb    <LRCol>
>                 mov     dl,LRCol
>                 endif

>                 mov     bh,7
>                 int     10h
>                 endm

> ClrScrn    macro                   ;Clear Screen
>                 ScrScrn 0,0,0,18H,4FH
>                 endm


>                 mov ah,2

>                 ifnb    <Row>
>                 mov     dh,Row
>                 endif

>                 ifnb    <Col>
>                 mov     dl,Col
>                 endif

>                 mov     bh,0
>                 int     10h
>                 endm

> ;************************************************************

> ; The program p7.asm looks like the following:

> ; Name: Steven Gallo
> ; Assignment Number: 07
> ; File Name: P7.ASM
> ; Program Description: P7.ASM prints the sum of five decimal numbers of at
> most
> ; 3 digits in length using the while loop structure.  The sum of the
digits
> in
> ; each column must lie between 0 and 9, inclusive, in order for the
results
> to
> ; make sense.

> Title   P7.ASM: Adds Five Decimal Numbers Of At Most Three Digits In
Length

> .model  small

> .stack  100h

> include cs25a.mac                       ;InChNE, OutChar, OutStr, CR, LF

> .data
> In_Prompt         db      "Enter five 3-digit decimal numbers:",CR,LF,'$'
> Out_Symbol      db      "      +______",CR,LF,'$'
> BlankSpaces     db      "         ",'$'
> Sum                  dw      ?
> Num                 dw      ?
> Base                 dw      10
> Dig                   db      ?
> NumCount        db      ?
> DigCount          db      ?

> .code
> init            proc                    ;Start


>                 mov     ds,ax

>                 call    main

>                 mov     ah,4ch          ;Return to DOS
>                 mov     al,0            ;Set error code
>                 int        21h

> init            endp                    ;End

> main            proc                    ;Enter

>                 OutStr  In_Prompt       ;Print "Enter 5 3-digit decimal
> numbers"
>                 OutChar CR              ;Print CR
>                 OutChar LF              ;Print LF

>                 mov     Sum,0           ;Sum = 0
>                 mov     NumCount,0      ;NumCount = 0
> while_1:                                ;WHILE NumCount < 5
>                 cmp     NumCount,5
>                 jae     endwhile_1

>                 OutStr BlankSpaces      ;       Print a Blank Spaces

>                 call    InDecNum        ;       Input Num

>                 mov     ax,Num          ;       Sum = Sum + Num
>                 add     Sum,ax

>                 inc     NumCount        ;       NumCount = NumCount + 1

>                 jmp     while_1
> endwhile_1:                             ;ENDWHILE
>                 OutStr  Out_Symbol      ;Print "       +____ "
>                 OutChar CR              ;Print CR
>                 OutChar LF              ;Print LF

>                 OutStr  BlankSpaces     ;Print Blank Spaces

>                                         ;Base = 10
>                 call    OutBaseSum      ;Print Sum in Base 10 (Decimal)

>                 OutChar CR              ;Print CR
>                 OutChar LF              ;Print LF

>                 ret                     ;Stop
> main            endp                    ;Exit

> InDecNum        proc                    ;Inputs A Valid Decimal Number
> 3-Digits
>                                         ;or less, left-justified
>                 mov     Num,0           ;Num = 0
>                 mov     Digcount,0      ;DigCount = 0

>                 InChNE  Dig             ;Input Dig No Echo
> repeat_1:                                   ;REPEAT
>                 cmp     Dig,'0'            ;   IF Dig >= '0' AND Dig <=
'9'
>                 jnae    Invalid_Dig
>                 cmp     Dig,'9'
>                 jnbe    Invalid_Dig

>                 OutChar  Dig               ;       Print Dig (Echo Dig to
> Screen)
>                 sub     Dig,'0'               ;       Dig = Dig - '0'

>                 mov     ax,Num           ;       Num = Num*10 + Dig
>                 mul     Base
>                 mov     bl,Dig
>                 mov     bh,0
>                 add     ax,bx
>                 mov     Num,ax

>                 inc     DigCount           ;       DigCount = DigCount + 1

>                 InChNE  Dig              ;       Input Dig No Echo
>                                                   ;   ENDIF
>                 cmp     DigCount,3     ;UNTIL Dig = CR OR DigCount >= 3
>                 jnb     until_1
>                 cmp     al,CR
>                 jne     repeat_1
>                 jmp     until_1
> Invalid_Dig:
>                 OutChar 7               ;Print

...

read more »



Fri, 01 Aug 2003 08:53:56 GMT  
 
 [ 6 post ] 

 Relevant Pages 

1. pgm5.asm(215) : fatal error A1010: unmatched block nesting : .if-.repeat-.while

2. MASM/TASM/NASM Testing 2 (1 are errors)

3. Fatal Python error: Interpreter not initialized (version mismatch?)

4. Fatal Python error: Interpreter not initialized (version mismatch?)

5. fatal error: internal error

6. Tkinter error in exiting the app: Fatal Python Error

7. TASM to MASM conversion help needed!

8. MASM or TASM for DOS

9. nasm, tasm, masm, hla

10. MASM/TASM to NASM Converter?

11. Masm and Tasm question.

12. translate code in TASM format to MASM format

 

 
Powered by phpBB® Forum Software