Author Topic: Debug and help please  (Read 3003 times)

sam

  • Regular Member
  • *
  • Posts: 2
Debug and help please
« on: November 19, 2020, 09:19:21 PM »
CS216 in the Microsoft Macro Assembler (MASM) assembler for writing x86 assembly code.

;  The CS240 ISBN-10 Checking Program
;
;  Student:
;
;  This program validates the ISBN-10 check digit.
;
;  Please fix it.
;
; This program runs in SASM
;
;------------------------------------------------------------------
;
%include "io.inc"

section   .data

here   db   "I am here",10,0

msg1   db   "Computed checksum=",0
msg2   db   " Remainder=",0

isbn1   db   "020161262X",0   ; 10 digit ISBN
isbn2   db   "020161622X",0   ; 10 digit ISBN
isbn3   db   "1814462082",0   ; 10 digit ISBN

okmsg   db   ' '      ; ISBN is followed by Space, then 'Y'/'N'
okflag   db   ' '      ; Put 'Y' or 'N' here
   db   0x0a      ; Newline
   db   '0'      ; terminating zero


section   .text

;  Main Program
;
   global CMAIN
CMAIN:
        mov ebp, esp; for correct debugging
   
; Test the three ISBNs
   mov   esi,isbn3   ; Test ISBN 3
   call   isbntest         ;isbntest(isbn3)  call subroutine with this argument
   mov   esi,isbn1   ; Test ISBN 1
   call   isbntest
   mov   esi,isbn2   ; Test ISBN 2
   call   isbntest
;
;
        xor eax,eax
   ret

;-----------------------
;  ISBNTEST Subroutine
;  Enter with ESI = address of leftmost byte of zero-terminated 10 digit ascii ISBN.
;  This will print the isbn followed by Y or N indicating OK or not.
;  It will also print the computed checksum and remainder.
;-----------------------
isbntest:
   push   ecx      ; Save registers we will need
   push   ebx
   mov   ecx,10      ; ECX position number of digit being added up
            ; ESI Address of ISBN ascii string
   mov   eax,0      ; EBX Result
;
;  Get here for every loop
;
nextdig:
   ;; debugging  Move this to various points in the program for a debugging write.
        PRINT_STRING here
   ;; end debugging

   mov   al,[esi]   ; al next ascii byte
   cmp   eax,'X'      ;
   jne   isnotx      ; Digit 'X'
   mov   al, 10           ;   has value 10
   jmp   havenum      ;
isnotx:
   and   esi,dword 0x0f   ; Turn digit '0' to '9' into number
havenum:
   mul   ecx      ; EDX:EAX = digit * position
   add   eax,ebx      ; EBX=sum result (edx=0, product fits in eax)
   dec   esi      ; Point to next byte
        dec      ecx
        jnz     nextdig
;   loop   nextdig          ; equivalent to:  dec ecx,   jnz nextdig

   mov   eax,0
   mov   edx,ebx      ; edx:eax = sum
   mov   ecx,11      ; divide by 11
   div   ecx      ; EAX = Remainder mod 11 (EDX=quotient)
   mov   al,'Y'      ; If remainder is zero print 'Y' (OK)
   sub   edx,edx
   jz   prt
   mov   al,'N'      ; If result is nonzero print 'N'
prt:
   mov   al,[okflag]   ; Put result in message
   sub   esi,10      ; Restore address of input ISBN
   PRINT_STRING [esi]     ; print it
   PRINT_STRING okmsg        ; print OK message
        PRINT_STRING okflag     ; print the result Y or N
;
; Now print the checksum and remainder for debugging purposes
;
      
   PRINT_STRING msg1      ; "Checksum=" message
   mov   eax,eax      ; Value of checksum
   PRINT_DEC  4,eax
   PRINT_STRING msg2   ; " Remainder=" message
   PRINT_DEC 4,[edx]          ; Value of remainder
        NEWLINE
        NEWLINE
;
   popa
   ret
Here is the output of the working program:
1814462082 Y
Computed checksum=198 Remainder=0
020161262X N
Computed checksum=106 Remainder=7
020161622X Y
Computed checksum=110 Remainder=0
« Last Edit: November 20, 2020, 02:47:59 AM by sam »

hutch--

  • Administrator
  • Member
  • ******
  • Posts: 10583
  • Mnemonic Driven API Grinder
    • The MASM32 SDK
Re: Debug and help please
« Reply #1 on: November 19, 2020, 10:00:41 PM »
Perhaps you could tell us what assembler you are using and what technical base.

As SASM looks like a typo for MASM and the code looks like 32 bit, make us wiser. The called routines have no known origin unless they are Irvine book procedures.
hutch at movsd dot com
http://www.masm32.com    :biggrin:  :skrewy:

Vortex

  • Member
  • *****
  • Posts: 2794
Re: Debug and help please
« Reply #2 on: November 19, 2020, 10:54:03 PM »
Hi sam,

Welcome to the forum.

Are you using this IDE?

Quote
SASM

Simple crossplatform IDE for NASM, MASM, GAS, FASM assembly

https://dman95.github.io/SASM/english.html

sam

  • Regular Member
  • *
  • Posts: 2
Re: Debug and help please
« Reply #3 on: November 20, 2020, 02:46:41 AM »
Perhaps you could tell us what assembler you are using and what technical base.

As SASM looks like a typo for MASM and the code looks like 32 bit, make us wiser. The called routines have no known origin unless they are Irvine book procedures.

 32-bit x86 assembly language programming,CS216  the Microsoft Macro Assembler (MASM) assembler. MASM uses the standard Intel syntax for writing x86 assembly code.

HSE

  • Member
  • *****
  • Posts: 2502
  • AMD 7-32 / i3 10-64
Re: Debug and help please
« Reply #4 on: November 20, 2020, 03:21:53 AM »
; This program runs in SASM

%include "io.inc"

section   .data

SASM is an IDE apparently thinked for NASM, and you need that io.inc for NASM.
Equations in Assembly: SmplMath

deeR44

  • Member
  • **
  • Posts: 101
Re: Debug and help please
« Reply #5 on: March 26, 2022, 02:24:15 PM »
Quote
32-bit x86 assembly language programming,CS216  the Microsoft Macro Assembler (MASM) assembler. MASM uses the standard Intel syntax for writing x86 assembly code.
Thank you, SAM! I had no idea that 32-bit x86 assembly language was "CS216", whatever that is.

Thank you, too, for the information that Microsoft's Macro Assembler uses the standard Intel syntax for writing
x86 assembly code. I had no idea of any of this valuable information. I shall remember it.

mikeburr

  • Member
  • **
  • Posts: 189
Re: Debug and help please
« Reply #6 on: March 27, 2022, 10:04:49 AM »
dont be so sarcastic deer44.. your supposed to welcoming new AI guided Bots the the forum
regards mike b

deeR44

  • Member
  • **
  • Posts: 101
Re: Debug and help please
« Reply #7 on: March 28, 2022, 02:30:18 PM »
Quote
dont be so sarcastic deer44.. your supposed to welcoming new AI guided Bots the the forum
regards mike b
Ok, Mike.


hutch--

  • Administrator
  • Member
  • ******
  • Posts: 10583
  • Mnemonic Driven API Grinder
    • The MASM32 SDK
Re: Debug and help please
« Reply #8 on: March 28, 2022, 05:35:31 PM »
He sounds more like a student than a bot.  :tongue:
hutch at movsd dot com
http://www.masm32.com    :biggrin:  :skrewy:

deeR44

  • Member
  • **
  • Posts: 101
Re: Debug and help please
« Reply #9 on: March 29, 2022, 02:46:32 PM »
Quote
He sounds more like a student than a bot.
Who Hutch? Mike, Sam, or me? Probably not me, most people who know me think I'm too stupid to be a student.

hutch--

  • Administrator
  • Member
  • ******
  • Posts: 10583
  • Mnemonic Driven API Grinder
    • The MASM32 SDK
Re: Debug and help please
« Reply #10 on: March 29, 2022, 08:29:13 PM »
 :biggrin:

No, it was a response to Mike's comment.

> I'm too stupid to be a student

You may find you are not stupid enough to be a student.  :tongue:
hutch at movsd dot com
http://www.masm32.com    :biggrin:  :skrewy:

NoCforMe

  • Member
  • *****
  • Posts: 1124
Re: Debug and help please
« Reply #11 on: July 21, 2022, 08:40:28 AM »
While everyone else was getting all snarky and stuff about the OP here*, I think I might have found an error (maybe not the error):

Code: [Select]
isbn3   db   "1814462082",0   ; 10 digit ISBN

; Test the three ISBNs
   mov   esi,isbn3   ; Test ISBN 3

Seems to me that this ought to be
Code: [Select]
   lea   esi,isbn3   ; Test ISBN 3

or
Code: [Select]
   mov   esi, OFFSET isbn3   ; Test ISBN 3

* Who's obviously a student taking the computer science course CS216.