1. Help on basic assembler learning
- Posted by Karlheinz Nester <Karlheinz_Nester at COMPUSERVE.COM> May 19, 1998
- 513 views
Hi there, before entering EUPHORIA & Assembler I like to study a little pure assembler coding.This means MASM & LINK.My problem : I like to call function 1Ch INT 21 to get the clustersize = and available cluster.I'm trying,since hours,to put reg CX = and AX on the screen,the response is PC hangs.So maybe there is = someone down the list who could give me a simple example.This would really help me to get my self-esteem back in order. Anyhow thanks in advance. Karlheinz = P.S. I downloaded all libs etc from Compuserve and Altavista, all to complicated for beginners. =
2. Re: Help on basic assembler learning
- Posted by Jacques Deschenes <desja at GLOBETROTTER.QC.CA> May 19, 1998
- 481 views
- Last edited May 20, 1998
At 14:12 19-05-98 -0400, you wrote: >Hi there, > >before entering EUPHORIA & Assembler I like to study a little >pure assembler coding.This means MASM & LINK.My problem : >I like to call function 1Ch INT 21 to get the clustersize >and available cluster.I'm trying,since hours,to put reg CX >and AX on the screen,the response is PC hangs.So maybe there is >someone down the list who could give me a simple example.This >would really help me to get my self-esteem back in order. >Anyhow thanks in advance. > >Karlheinz >P.S. I downloaded all libs etc from Compuserve and Altavista, > all to complicated for beginners. > here is a function that return the cluster size in bytes. It assume that each sector is 512 bytes, which I think is the case for regular PC drives. include machine.e function GetClusterSize(integer drive) sequence registers if (drive >= 'A') and (drive <= 'Z') then drive = drive - 'A' + 1 elsif (drive >= 'a') and (drive <= 'z') then drive = drive - 'a' + 1 elsif (drive < 0) or (drive > 26) then return -1 -- bad drive end if registers = repeat(0,10) registers[REG_AX] = #1C00 registers[REG_DX] = drive registers = dos_interrupt(#21,registers) return remainder(registers[REG_AX],256)*512 end function printf(1,"current drive cluster size is %d bytes\n", GetClusterSize(0)) printf(1,"drive a: cluster size is %d bytes\n", GetClusterSize('a')) Jacques Deschenes Baie-Comeau, Quebec Canada desja at globetrotter.qc.ca
3. Re: Help on basic assembler learning
- Posted by Karlheinz Nester <Karlheinz_Nester at COMPUSERVE.COM> May 20, 1998
- 503 views
Good morning Jacques from Mannheim, your Routine runs fine !.Thanks for that. But I'm trying to do in real assembler,ex. with MASM & LINK. For example : prognam cluster . . mov AH,36H ;or 1CH,1BH int 21H ---> how to put reg AX and CX (after multiplication) on screen ?? . . prognam ends end So,one more time,thanks for your quick help. Regards Karlheinz =
4. Re: Help on basic assembler learning
- Posted by mountains at MINDSPRING.COM May 20, 1998
- 496 views
At 02:41 AM 5/20/98 -0400, you wrote: >Good morning Jacques from Mannheim, > >your Routine runs fine !.Thanks for that. > >But I'm trying to do in real assembler,ex. with MASM & LINK. > >For example : >prognam cluster > . > . > mov AH,36H ;or 1CH,1BH > int 21H >---> how to put reg AX and CX (after multiplication) on screen ?? > . > . >prognam ends > end > Well, you'll have a choice: you could call the dos console out routine, or you could write direct to screen memory. Either way, you'll first have to convert the values in the registers into readable form. ;subroutine to convert a binary number to a text string ; ; input: ; ax = number to convert ; ds:bx = pointer to end of buffer to store text in ; cx = number of digits to convert ; ; output: none ; ; registers destroyed: ax,bx,cx,dx,si ; ConvertNumberToString PROC mov si, 10 ; divide by ConvertLoop: sub dx,dx ; convert ax to doubleword in dx:ax div si ; divide by 10 add dl,'0' ; convert remainder to a text char mov [bx],dl ; store digit in the string dec bx ; decrement the location of the next digit in string loop ConvertLoop ; do the next digit ret ConvertNumberToString ENDP ; ; subroutine to print a string to the display using dos function ; ; input: ds:bx points to string ; output: none ; ; registers destroyed: none ; PrintString PROC push ax ; save these registers push dx mov ah, 9 ; dos function call mov dx,bx ; point to the string to print int 21h ; call dos interrupt pop dx pop ax ; restore the registers ret PrintString ENDP ---- Assembly programming is like hitting yourself with a large stick. You do it because it feels so good when you stop. Regards, Irv Mullins
5. Re: Help on basic assembler learning
- Posted by Karlheinz Nester <Karlheinz_Nester at COMPUSERVE.COM> May 21, 1998
- 499 views
Hi Irv, thanks for the help.With your last phrase about ASSEMBLER coding you hit the nail right on the head.I found out that I'm using a too large stick !.My problem is still how to get it running.Is there a possibility that you have a short code example in your bag of tricks,ready to run ??.= If I'm asking to much ,just ..... Anyway,thanks in advance.You could make somebody a bit calmer. As I can see,all of you are Assembler Gurus. Regards Karlheinz =