                   RU.ASM.CHAINIK FAQ
                    13.2.2001

 FAQ       RU.ASM.CHAINIK
                 faqserver' 
             2:5058/58.111,  'asmfaq'.
----------------------------------------------------------------------

                              :

1.     'Hello, world!'
2.     (, )?
3.     tasm  tlink?
4.   PSP?
5.        ?
6.       pp   ?
7.       ?
8.    ?
9.     ?
10.   -      ?
11.        LEA.      OFFSET,   Tasm
 LEA  MOV...OFFSET.
12.     ?    mov ax,1.
13.   COM   ,  TD ?
14.    !  COM  , TDS ,  TD   
: &quot;Program has no symbol table&quot;
15.    ,   ?
16.       4Bh
17.      48h
18.    ,   -?
19.    ,  ?
20.      rdtsc?
21.    ,     ,    ( 
!)?
22.   ,   ?
23.  ,  &quot;Relative jump out of range&quot;?
24.  -   ?
25.    CMOS     ?
26.  ,   ?
27.      ?
28.    ?
last.    ... ?

----------------------------------------------------------------------------
Q1:     'Hello, world!'
A:  :   com  (      
 EXE).

..model tiny                     ;   -  com-
..code                           ;    p - 
..startup                        ; p  pp

        mov ah,09               ; y N9 -    p
        mov dx,offset msg       ;  dx  p  msg
        int 21h                 ;    p 
                                ; ( ah   p y)
        ret                     ;  -   p pp
                                ;   -  ...
msg     db 'Hello, world! $'    ;  (   '$')
end                             ;  

----------------------------------------------------------------------------
Q2:     (, )?
A:  :

tasm hello.asm
tlink /t hello.obj

----------------------------------------------------------------------------
Q3:     tasm  tlink?
A:  -  freeware,     :)
   <a href="http://bsg.nm.ru/minimum.zip" target="_blank">http://bsg.nm.ru/minimum.zip</a>

----------------------------------------------------------------------------
Q4:   PSP?
A:  PSP  -  ,          ,
    ,  ,  
   . p  pp ( ,   ) ds  es p
 p PSP.  COM-     cs.

----------------------------------------------------------------------------
Q5:        ?
A:    PSP:[80h] - 1  ,  127   .
A2:                   
  .   PSP:[80]   ,   
   . PSP:[2ch] -    .

----------------------------------------------------------------------------
Q6:       pp   ?
A:
        mov     ax,1203h
        int     2Fh              ;   DOS
        mov     ax,ds
        lds     si,ds:[bp-1Ah]   ; ds:si -    


----------------------------------------------------------------------------
Q7:       ?
A:      -            
-  .
        p   pp      p   pp.
p   p  p,    pp    
pp       pp, 
      DOS,  pp.      
   , ,     , 
   ..
         'Hello, world!',   int 21h -
    21h,     .  ah   
09h -      ,    ds:dx.
---------------------------------------------------------------------------
Q8:    ?
A:    ,                
  .  ,  ,    
'INT  21h',         0000:21h*4 ( 4
    ).

----------------------------------------------------------------------------
Q9:     ?
A:  :

            ;
            ;   
            ; : X=    
            ;
 Sound      proc     near
            push     ax        ; 
            push     bx
            push     dx
            mov      bx,ax     ;
            mov      ax,34DDh
            mov      dx,12h    ;(dx,ax)=1193181
            cmp      dx,bx     ; bx &lt; 18,  
            jnb      Done      ;  
            div      bx        ;ax=(dx,ax)/bx
            mov      bx,ax     ; 
            in       al,61h    ; 
            or       al,3      ;  0-1
            out      61h,al
            mov      al,00001011b   ;  :
                               ; 2,  3,  
            mov      dx,43h
            out      dx,al     ;   
            dec      dx
            mov      al,bl
            out      dx,al     ;  
            mov      al,bh
            out      dx,al     ;  
 Done:
            pop      dx        ; 
            pop      bx
            pop      ax
            ret
 Sound      endp

 :

 No_Sound   proc     near
            push     ax
            in       al,61h    ; 
            and      al,not 3  ;  0-1
            out      61h,al
            pop      ax
            ret
 No_Sound   endp

----------------------------------------------------------------------------
Q10:   -      ?
A:   - .   -  .
          
   ,    ,    
   . ,    
   ,     . 
   -   ,      
   . :

   .MODEL LARGE
          MyGroup       group   MySpecialSeg,$LibTable
          MySpecialSeg  segment word public use16 'DATA'
   ...
          ends
          $LibTable     segment para common use16 'DATA'
          ...
          ends
   .DATA
   .CODE
   end

         ,
    ( )   .


---------------------------------------------------------------------------
Q11:     LEA.      OFFSET,   Tasm 
   LEA  MOV...OFFSET.
A: MOV...OFFSET  LEA,    SMART tasm  LEA  MOV
     ,   :

        lea   di,Array
        mov   di,offset Array

        :

        lea   di,Array[si+bx.FieldName]

     LEA      :

        mov   di,offset Array
        add   di,si
        add   di,bx
        add   di,FieldName

            
   -  ,  , LEA     
      MOV...OFFSET


---------------------------------------------------------------------------
Q12: mov ax,@data
     mov ds,ax

       ?    mov ax,1.
         : mov ax,140Fh
      ?

A: .. EXE      ,   
   c  EXE   16-  [0...FFFF] 
   c,     EXE. ,   
   EXE  ,     EXE,   
          , 
     ,   ,   
    EXE.

   ,  EXE   ,    140Eh:0 
       mov ax,1  mov ax,140F

---------------------------------------------------------------------------
Q13:   COM   ,  TD ?
A:   comdbg.bat TEST

   tasm /zi %1
   tlink /v %1,%1,,,
   tdstrip -s -c %1.exe

----------------------------------------------------------------------------
Q14:  ! COM , TDS ,  TD    :
  &quot;Program has no symbol table&quot;
A:  TDS  ,   COM -    .
     touch  NWDOS ( MS DOS  )

   touch %1.tds

---------------------------------------------------------------------------
Q15:    ,   ?
A: FirstFreeByteSeg - PspSeg + ((FirstFreeByteOffs+15) div 16)

Resident        macro FirstFreeByteSeg,FirstFreeByteOffs
        mov     dx,FirstFreeByteSeg
        sub     dx,[PspSeg]
        mov     ax,FirstFreeByteOffs
        dec     ax
        shr     ax,4
        inc     ax
        add     dx,ax

        mov     ah,31h
        mov     al,[ErrorLevel]
        int     21h
endm

Resident        seg Install,&lt;offset Install&gt;

---------------------------------------------------------------------------
Q16:       4Bh
Q17:      48h
A:   .

---------------------------------------------------------------------------
Q18:    ,   -?
A:       ,     .

---------------------------------------------------------------------------
Q19:    ,  ?
A:         DOS 4Ah.   ,   
 Resident:

ShrinkMem       macro FreeSeg,FreeOffs
   mov          bx,FreeSeg
   sub          bx,[PspSeg]
   mov          ax,FreeOffs

   dec          ax
   shr          ax,4
   inc          ax

   add          bx,ax
   mov          ah,4Ah
   mov          es,[PspSeg]
   int          21h
endm

ShrinkMem       &lt;seg stack&gt;,&lt;(size stack)+1&gt;
  /      
     .

----------------------------------------------------------------------------
Q20:      rdtsc?
A:  read  tsc - Read Time Stamp Counter.   tsc,  
    edx:eax          
.    - 0F 31,     Pentium (
   .)

---------------------------------------------------------------------------
Q21:.  ,   ,    ( 
   !)?
A:    .

Q:  .
A:   -  :

..model farstack small, pascal
   .386
   locals @@
..stack          2048
..code
Factorial       PROC           ; function factorial(@@N:Word):DWord;
   arg          @@N:word       ; begin
   mov          ax,@@N
   cmp          ax,1           ; if (@@N=1) or (@@N=0) then
   ja           @@calc
   mov          ax,1           ;    factorial:=1
   xor          dx,dx
   ret
@@calc:
   dec          ax             ; else
   push         ax
   call         Factorial      ;    factorial := factorial(@@N-1)
   mul          @@N            ;                                  * @@N;
   ret                         ; end;
endp

MAIN            PROC
   .startup
   push         4
   call         Factorial
   .exit
ENDP

end             MAIN


----------------------------------------------------------------------------
Q22:   ,   ?
A:      :

..model tiny
..code
..386                                            ;  :)
..387                                            ;  
..startup

                         finit                  ;  
                         fild data1             ;  data1
                         fiadd data2            ;   data2
                         fist _result           ;   
                                                ; _result

                         ret
data1   dw 1
data2   dw 200
_result dw ?

end

  .
 :
fild
^^^^
||++
|||
||+-- 'ld' - load,     
|+--- 'i' - integer, ,      (
|             - '',   fld,  -  
|             , 'b', .. fbld -  BCD )
+---- 'f' - ,    

 :

fld data1                       ;     
                                ;   data1  

fist _result                    ;       
                                ;  _result (  
 -
                                ;    )

fistp _result                   ;   ,     
                                ;    

fsqrt                           ;     st0, 
                                ;     ,   
                                ;   

fcos, fsin                      ;     , 
                                ;   .    
                                ; __.

fsincos                         ;    sin  cos, 
                                ; st0  sin,  st1 - cos.


      Turbo Debugger:

F10/View/Numeric processor:
 ,       300 :)

+=[x]=80486 IPTR=54CE3 OPCODE=706 OPTR=54CEE==2=[][]=+
|Valid ST(0) 300                         | im=1 | ie=0 |
|Empty ST(1)                             | dm=1 | de=0 |
|Empty ST(2)                             | zm=1 | ze=0 |
|Empty ST(3)                             | om=1 | oe=0 |
|Empty ST(4)                             | um=1 | ue=0 |
|Empty ST(5)                             | pm=1 | pe=0 |
|Empty ST(6)                             |iem=0 | ir=0 |
|Empty ST(7)                             | pc=3 | cc=0 |
|                                        | rc=0 | st=7 |
|                                        | ic=0 |      |
+xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+======+=====-+

:

cs:0107 D9FA           fsqrt

+=[x]=80486 IPTR=54CE7 OPCODE=1FA OPTR=54BE0==2=[][]=+
|Valid ST(0) 17.320508075688773          | im=1 | ie=0 |
|Empty ST(1)                             | dm=1 | de=0 |
|Empty ST(2)                             | zm=1 | ze=0 |
|Empty ST(3)                             | om=1 | oe=0 |
|Empty ST(4)                             | um=1 | ue=0 |
|Empty ST(5)                             | pm=1 | pe=1 |
|Empty ST(6)                             |iem=0 | ir=0 |
|Empty ST(7)                             | pc=3 | cc=0 |
|                                        | rc=0 | st=7 |
|                                        | ic=0 |      |
+xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+======+=====-+

     .    
  ds:[110]  :

cs:0109 DF1E1001       fistp  word ptr[0110]

 :

ds:0110 11 00 FF 16 57 9A A5 1B
        ^^^^^     :)

----------------------------------------------------------------------------
Q23: ,   &quot;Relative jump out of range&quot;?
A:     .386        -  .586,  pp  - 
...  ;)       8086.    jmp
short .
A2:        p   pp  386,  
  'jumps':

JUMPS
   ....
   CMP  
   JZ  
   ....
NOJUMPS

   p p,  :

   CMP  
   JNZ @2
   JMP _
@2:

     p   JUMPS         p   p    
p,      .       
.

----------------------------------------------------------------------------
Q25:    CMOS     ?
A:    CMOS (  )  64 (
,  128)   .
     PC    AT         
(RTC)  64   CMOS-.
            ,  
    ,          
  (      ,      AT
            ,    
 ).

    :

             CMOS,   OUT 70H, ;
    IN 71H.     CMOS,  OUT 70H,
;  OUT 71H, .

:  ;-------     
         mov     al,12H
         out     70H,al        ;  CMOS 12H
         jmp     $+2           ;  
         in      al,71H        ;  AL   (0-15)

        10H..20H        ,    
          .
  -   16-    .
----------------------------------------------------------------------------
Q26:      ,        , 
         , tasm , , 
 :(   ...  - ?  
      ?
A:   ,  ,   :)

  :          locals  @@    ,
    '@@'  __,    
         .

  :  tasm'    ,   
    @@,@b,@f (@b  @f     
@@  ,  ),     'masm'  'quirks'
(  ,    !).  :
   +------------+
@@:|            |
   +    nop     |
        nop     |
        jmp @b -+
        nop
        jmp @f -+
@@:+    nop     |
   +------------+
----------------------------------------------------------------------------
Q27:       ?
A:   :
(   es:di)

byte2hex        proc    near
                push    cx
                mov     cx,2
@@L1:           rol     dl,4
                mov     ax,300fh
                and     al,dl
                aaa
                aad     11h
                stosb
                loop    @@L1
                pop     cx
                ret
byte2hex        endp

word2hex        proc    near
                push    cx
                mov     cx,2
@@L1:           rol     dx,8
                call    byte2hex
                loop    @@L1
                pop     cx
                ret
word2hex        endp

dword2hex       proc    near
                mov     cx,2
@@L1:           rol     edx,16
                call    word2hex
                loop    @@L1
                ret
dword2hex       endp

----------------------------------------------------------------------------
Q28:      (sys,     
org0?)
A:  :
tasm driver.asm /m4
tlink driver.obj, driver.sys /t
&gt;               ^  ,    :)

p.s.      ,        .
      .        tlink    , 
     ,      
%1  %2    ..    tlink'  ,   
  .       ,     
'tlink driver.obj, driver.bin /t'
----------------------------------------------------------------------------
Qlast:    ... ?
A:   ,   :)

----------------------------------------------------------------------------
  :

 NASM (freeware)
<a href="http://www.cryogen.com/nasm" target="_blank">http://www.cryogen.com/nasm</a>

Interrupt list (  )
<a href="http://www.pobox.com/~ralf" target="_blank">http://www.pobox.com/~ralf</a>

 , , NG, TechHelp!.
<a href="http://www.whitetown.com/ru/ng/" target="_blank">http://www.whitetown.com/ru/ng/</a>
<a href="http://www.shortway.to/posohov" target="_blank">http://www.shortway.to/posohov</a>

  ASM'  Windows:
<a href="http://win32asm.newmail.ru/" target="_blank">http://win32asm.newmail.ru/</a>

TechHelp! 4.0 RUS
<a href="http://bsg.nm.ru/techhelp.zip" target="_blank">http://bsg.nm.ru/techhelp.zip</a>

----------------------------------------------------------------------------
FAQServer                                      2:5058/58.111
----------------------------------------------------------------------------


      FAQ'   -
Alexander Zigar' 2:5058/56.8.

  FAQ  :

 Alexander Zigar'                    2:5058/56.8
 Kirill Barashkin                    2:5080/500.271
 Max Vorobyov                        2:5025/150.24
 Roman Perminov                      2:5070/313
 Yury Suharev                        2:5023/19.11
 Mihail Epihin                       2:5023/29.34

      RU.ASM.CHAINIK, TALKS.ASM, PC.CODING 
  .
