วันอังคารที่ 20 สิงหาคม พ.ศ. 2556

LODSB

stseg segment para stack db 64 dup('A'); sttop label word stseg ends dtseg segment str1 db 'Hello,World',0dh,0ah,'$' str2 db 'Hello,World',0dh,0ah,'$' dtseg ends cdseg segment main proc far assume cs:cdseg,es:dtseg,ds:dtseg,ss:stseg mov ax,dtseg mov ds,ax mov es,ax mov ax,stseg mov ss,ax lea sp,sttop ;------------------------------------------------------------------- lea si,str1 lodsb mov dl,al mov ah,02 int 21h ;------------------------------------------------------------------- mov ah,4ch int 21h main endp cdseg ends end main

repne scasb ค้นหาตัวอักษร

stseg segment para stack db 64 dup('A'); sttop label word stseg ends dtseg segment str1 db 'Hello,World',0dh,0ah,'$' str2 db 'Hello,World2',0dh,0ah,'$' mess1 db 'Found',0dh,0ah,'$' mess2 db 'Not Found',0dh,0ah,'$' dtseg ends cdseg segment main proc far assume cs:cdseg,es:dtseg,ds:dtseg,ss:stseg mov ax,dtseg mov ds,ax mov es,ax mov ax,stseg mov ss,ax lea sp,sttop ;------------------------------------------------------------------- lea di,str1 mov al,'r' cld mov cx,14 repne scasb je found notfound: lea dx,mess2 mov ah,9 int 21h jmp done found: lea dx,mess1 mov ah,9 int 21h jmp done done: ;------------------------------------------------------------------- mov ah,4ch int 21h main endp cdseg ends end main

20/08/2013 เปรียบเทียบ สตริง

stseg segment para stack db 64 dup('A'); sttop label word stseg ends dtseg segment str1 db 'Hello,World',0dh,0ah,'$' str2 db 'Hello,World',0dh,0ah,'$' mess1 db 'Str1 is match Str2',0dh,0ah,'$' mess2 db 'Str1 does not match Str2',0dh,0ah,'$' dtseg ends cdseg segment main proc far assume cs:cdseg,es:dtseg,ds:dtseg,ss:stseg mov ax,dtseg mov ds,ax mov es,ax mov ax,stseg mov ss,ax lea sp,sttop ;------------------------------------------------------------------- lea si,str1 lea di,str2 cld mov cx,14 repe cmpsb je match nomatch: lea dx,mess2 mov ah,9 int 21h jmp done match: lea dx,mess1 mov ah,9 int 21h jmp done done: ;------------------------------------------------------------------- mov ah,4ch int 21h main endp cdseg ends end main

20/08/2013

stseg segment para stack db 64 dup('A'); sttop label word stseg ends dtseg segment str1 db 'Hello,World',0dh,0ah,'$' str2 db 15 dup (' ') mess db 'str2 = $' dtseg ends cdseg segment main proc far assume cs:cdseg,es:dtseg,ds:dtseg,ss:stseg mov ax,dtseg mov ds,ax mov es,ax mov ax,stseg mov ss,ax lea sp,sttop ;------------------------------------------------------------------- lea si,str1 lea di,str2 cld mov cx,14 rep movsb lea dx,mess mov ah,9 int 21h lea dx,str2 mov ah,9 int 21h ;------------------------------------------------------------------- mov ah,4ch int 21h main endp cdseg ends end main

วันอังคารที่ 13 สิงหาคม พ.ศ. 2556

Assembly : String

stseg segment para stack    
         db 64 dup('0');
sttop label word
stseg ends

dtseg segment
max db  100
count db  0
sentence db 100 dup (' ')
mess db 'Input String =>$'
dtseg ends


cdseg segment
main  proc far
         assume cs:cdseg,es:dtseg,ds:dtseg,ss:stseg
         mov ax,dtseg
         mov ds,ax

         mov ax,stseg
         mov ss,ax
         lea sp,sttop
;----------------------------------
         mov ah,9h
lea dx, mess
int 21h

mov ah,0ah
lea dx, max
int 21h

;----------------------------------
         mov ah,4ch
         int 21h
main  endp
cdseg ends
          end main

วันอังคารที่ 6 สิงหาคม พ.ศ. 2556

Assembly IF-ELSE

stseg segment para stack      
         db 64 dup('0');
sttop label word
stseg ends

dtseg segment
mess1 db 'AX > BX',0dh,0ah,'$'
mess2 db 'AX <= BX',0dh,0ah,'$'
dtseg ends

cdseg segment
main  proc far
         assume cs:cdseg,es:dtseg,ds:dtseg,ss:stseg
         mov ax,dtseg
         mov ds,ax

         mov ax,stseg
         mov ss,ax
         lea sp,sttop
;----------------------------------
         mov ax,80
mov bx,80
cmp ax,bx  
jle ELSE_IF
lea dx,mess1  ;AX > BX
mov ah,9
int 21h
JMP END_IF
ELSE_IF:
lea dx,mess2  ;AX < BX
mov ah,9
int 21h
END_IF:
;----------------------------------
         mov ah,4ch
         int 21h
main  endp
cdseg ends
          end main

Assembly CMP

stseg segment para stack      
         db 64 dup('0');
sttop label word
stseg ends

dtseg segment
mess1 db 'AX > BX',0dh,0ah,'$' ;odh,oah = \n new line in c
dtseg ends

cdseg segment
main  proc far
         assume cs:cdseg,es:dtseg,ds:dtseg,ss:stseg
         mov ax,dtseg
         mov ds,ax

         mov ax,stseg
         mov ss,ax
         lea sp,sttop
;----------------------------------
         mov ax,30
mov bx,20
cmp ax,bx   ; if ax > bx print 'ax>bx'
jnl PRINT
PRINT:
  lea dx,mess1 ;dx -> mess1
  mov ah,9
  int 21h

;----------------------------------
         mov ah,4ch
         int 21h
main  endp
cdseg ends
          end main

วันพุธที่ 26 มิถุนายน พ.ศ. 2556

Assembly : ตัวอย่างโจทย์ภาษาแอสเซมบลี แฟลกรีจิสเตอร์

1.คัดลอกค่าแฟลก CF,PF,AF,ZF และ SF ไปเก็บไว้ในรีจิสเตอร์ AH
2.นำค่าจากรีจิสเตอร์ AH ไปเก็บไว้ใน แฟลกรีจิสเตอร์
3.กำหนดให้ตารางมีค่า 77,34,89,98,17,66,55,21,49,16 ให้นำค่าตำแหน่งที่ 0 และ 7 จากตารางมาไว้ในรีจิสเตอร์ AL

วันอังคารที่ 25 มิถุนายน พ.ศ. 2556

Assembly : PUSH , POP

stseg segment para stack       
         db 64 dup('0');
sttop label word
stseg ends

dtseg segment
dtseg ends

cdseg segment
main  proc far
         assume cs:cdseg,es:dtseg,ds:dtseg,ss:stseg
         mov ax,dtseg
         mov ds,ax

         mov ax,stseg
         mov ss,ax
         lea sp,sttop

         mov ax,18
         mov bx,33
   
         push ax  
         push bx
         pop cx
         pop dx

         mov ah,4ch
         int 21h
main  endp
cdseg ends
          end main

วันจันทร์ที่ 24 มิถุนายน พ.ศ. 2556

PHP : random ตัวเลข n หลัก

function _generateRandom($length=6)
{
    $_rand_src = array(array(48,57));
    srand ((double) microtime() * 1000000);
    $random_string = "";
    for($i=0;$i<$length;$i++){
        $i1=rand(0,sizeof($_rand_src)-1);
        $random_string .= chr(rand($_rand_src[$i1][0],$_rand_src[$i1][1]));
    }
    return $random_string;
}

นำใช้
echo _generateRandom();  // 6 หลัก
echo _generateRandom(10);  // 10 หลัก

วันอาทิตย์ที่ 23 มิถุนายน พ.ศ. 2556

Assembly : โครงสร้างโปรแกรมภาษาแอสเซมบลี แบบยาว

stseg  segment para stack
         db 64 dup('0');
sttop  label word
stseg  ends

dtseg segment
; ----สำหรับกำหนดตัวแปร----
dtseg ends

cdseg segment
main  proc far
        assume cs:cdseg,es:dtseg,ds:dtseg,ss:stseg
        mov ax,dtseg
        mov ds,ax

        mov ax,stseg
        mov ss,ax
        lea   sp,sttop

; /*--------- ใส่ Code Program---------*/

       mov ah,4ch
       int    21h

main   endp
cdseg  ends
         end main

วันพฤหัสบดีที่ 20 มิถุนายน พ.ศ. 2556

Assembly : การติดตั้ง editplus สำหรับเขียนภาษาแอสแซมบลี

1. ก่อนอื่นเราต้องไปโหลดโปรแกรม editplus ที่เว็บนี้ก่อน http://www.editplus.com ติดตั้งให้เรียบร้อย (ผู้เขียนใช้เวอร์ชั่น Editplus 3.51)
2. จากนั้นโหลดไฟล์ที่ทำให้ code ที่เราเขียนมีสี  คลิกที่นี่  (Google Drive) แตกซิบไปไว้ที่ C:\Program Files (x86)\EditPlus 3 หรือที่ๆเราติดตั้ง EditPlus
แนะนำให้ไว้ที่เดียวกันกับที่ติดตั้ง EditPlus เพราะจะได้ไม่เผลอไปลบไฟล์
3. โหลดโปรแกรมสำหรับคอมไพภาษาแอสแซมบลี TASM คลิกที่นี่ (Google Drive)นำไปแตกไว้ที่ drive c ให้เรียบร้อย

เมื่อเตรียมไฟล์ต่างๆเรียบร้อยแล้วเรามาตั้งค่าโปรแกรมกันเลย
1. เปิดโปรแกรม EditPlus แล้วไปที่เมนู Tools->Preferences  แล้วคลิก Settings&syntax จากนั้นคลิกที่ Add ดังภาพ


2. เมื่อคลิกที่ Add แล้วให้ใส่ asm เป็นการตั้งชื่อให้มันว่าเป็นไฟล์ประเภทไหนจะตั้งอะไรก็ได้อาจจะตั้งเป็น Assembly อันนี้ก็แล้วแต่ชอบ


3.เป็นการใส่นามสกุลไฟล์ว่าจะให้แสดง code สีในนามสกุลอะไรเอาก็ใส่ asm ไปเลย


4. ตอนไปเป็นการนำไฟล์ Syntax ที่เราโหลดมาเอาเข้าไปในโปรแกรม ช่องที่ 1 ให้ browse ไปหาไฟล์ masm.stx ช่องที่ 2 ไฟล์ masm.acp ตามลำดับจากนั้นกด OK เป็นอันเสร็จสิ้นการตั้งค่าให้ Editplus


การ Compile ให้เข้า DosBox อันนี้ไม่ขอพูดถึงนะครับ จริงๆแล้วอยากนำเสนอการตั้งค่า Editplus มาช่วยในการ Compile จากตัวโปรแกรม Editplus เลยแต่ด้วยตัวโปรแกรม TASM ไม่สามารถรันบน Window ในเครื่องปัจจุบันได้ด้วยเหตุผลที่ว่าเราเข้ากันไม่ได้ - -"
ใช้คำสั่ง
C:\TASM\BIN>tasm   filename.asm
C:\TASM\BIN>tlink    filename

เพิ่มเติมสำหรับการโหลดโปรแกรมใน Google Drive (จะต้องมี e-mail ของ Google ในการ Login)ให้คลิกที่เมนูไฟล์แล้วเลือกดาวน์โหลด







Assembly : การ debug โปรแกรมโดยเปลี่ยนข้อความข้างในโปรแกรม

ขั้นเตรียมการ
copy ไฟล์ที่คอมไพจากภาษาซีที่เป็นนามสกุล .exe ไปไว้ที่เดียวกันกับไฟล์  

- ใช้คำสั่ง debug  
- กด d ไปเรื่อยๆจนเจอข้อความที่เขียนไว้ในภาษาซี
- จากนั้นจด address ไว้ว่าจะแก้ address ไหน
- เปลี่ยนข้อความเป็นฐาน16ไปที่เว็บ   http://easycalculation.com/ascii-hex.php
- ช่องบนสุดกรอกข้อความที่ต้องการ
- การนำไปใช้ให้ใช้เลขในช่อง Equivalent Hex Value

การป้อนข้อมูลลง address
- ใช้คำสั่ง eตามด้วย address ตัวอย่าง  e1580 แล้ว enter
- กรอกรหัส ascii ทีละชุดแล้วกด space bar เพื่อกรอกข้อมูลชุดถัดไปเมื่อครบแล้วกด enter
- การดูผลว่าเป็นอย่างไรป้อน dตามด้วย address ก่อนข้อความในภาษาซีที่เราแสดง ตัวอย่าง d1570







วันพุธที่ 19 มิถุนายน พ.ศ. 2556

OOP : ความเร่ง a = (v2-v1)/t

/*
 * My home work : ridtichai borseen
 */
package hw01;
import java.util.Scanner;

public class Hw01 {

    public static void main(String[] args) {
        float a;
        float v1;
        float v2;
        float t;
     
        Scanner sc = new Scanner(System.in);
        System.out.print("Input V1 =>");
        v1 = sc.nextFloat();

        System.out.print("Input V2 =>");
        v2 = sc.nextFloat();

        System.out.print("Input T =>");
        t = sc.nextFloat();
     
        a = (v2-v1)/t;
     
        System.out.println("A = (V2-V1)/T");
        System.out.println(a+" = ("+v2+"-"+v1+")/"+t);      
     
    }
}