alexa-tracking

Main Content

1024
1024
KASKUS
51
244
https://www.kaskus.co.id/thread/52d12aa819cb17aa768b459d/how-to-change-cld-to-std-assembly-code
Breaking News! 
how to change CLD to STD assembly code..
Assalamualaikum, saya newbie di forum ini. maklum kalo ga ada yang kenal, tapi siapa tau master2 disini bisa kasih pencerahan. ini source code nya.

;/========================================\;
; PROGRAM : STRING1.ASM ;
; AUTHOR : S’to ;
;\========================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kalimat DB 'Donald Duck$' ; 12 karakter
Buffer DB 12 DUP(?)
Proses:
LEA SI,Kalimat ; SI = sumber
LEA DI,Buffer ; DI = tujuan
CLD ; Arah proses menaik
MOV CX,18 ; Banyaknya pengulangan
Ulang :
MOVS ES:Buffer,Kalimat ; Pindahkan data pada
LOOP Ulang ; DS:SI ke ESemoticon-Big GrinI
MOV AH,09 ;
LEA DX,Buffer ;
INT 21h ; Cetak data pada buffer
INT 20h
END TData

intinya yang saya tau, itu proses pemindahan data dari register DS:SI ke ESemoticon-Big GrinI yang menggunakan perintah CLD. kan si CLD itu dipengaruhi register flags si DF, CLD berfungsi ketika DF berstatus 0. jelas dong program baru jalan ya flagnya 0. gmna caranya di itu coding DF nya jadi 1 (set), biar bisa pake STD. ada yang bisa jelasin ga gan? atau kasih contohnya? disini saya pake TASM. medianya CMD.

ini ada gambarnya, kalo dia work tampil "Donald Duck"how to change CLD to STD assembly code..
Coba agan baca lagi penjelasan dari instruksi CLD, STD dan MOVS karena pertanyaan agan ini invalid.
Panjang Kalimat 12 karakter, kenapa agan set CX 18?
Quote:Original Posted By terge
Coba agan baca lagi penjelasan dari instruksi CLD, STD dan MOVS karena pertanyaan agan ini invalid.
Panjang Kalimat 12 karakter, kenapa agan set CX 18?


ya gapapa sih gan, itu di kasih lebih aja range nya. masalahnya bukan CX. tapi gmna caranya agar CLD di gantikan oleh STD. saya sudah paham apa itu CLD, STD, MOVS, MOVSB, dll. tetapi saya blm tau gmna caranya agar direction flag nya itu 1, lalu kita pakai STD. agar menurun, kalo pake CLD kan increase.
> ya gapapa sih gan, itu di kasih lebih aja range nya.
emoticon-Cape d... (S) Ya ga bisa begitu dong. Agan kopi string sebesar 18 bytes, sedangkan Buffer besarnya cuma 12 bytes. Mau agan taruh ke mana 6 bytes sisanya?

> saya sudah paham apa itu CLD, STD, MOVS, MOVSB, dll.
Seperti inikah pemahaman agan tentang instruksi CLD (yang saya bold)?
Quote:Original Posted By ranggarain
intinya yang saya tau, itu proses pemindahan data dari register DS:SI ke ES:DI yang menggunakan perintah CLD. kan si CLD itu dipengaruhi register flags si DF, CLD berfungsi ketika DF berstatus 0. jelas dong program baru jalan ya flagnya 0. gmna caranya di itu coding DF nya jadi 1 (set), biar bisa pake STD. ada yang bisa jelasin ga gan? atau kasih contohnya? disini saya pake TASM. medianya CMD.

Coba agan bandingkan dengan ini.
Dan kalau agan sudah paham instruksi MOVSB, kenapa tidak menggunakan instruksi ini aja (or better yet, REP MOVSB)? MOVS is obsolete.

> saya blm tau gmna caranya agar direction flag nya itu 1, lalu kita pakai STD. agar menurun
Ini pertanyaan agan yang invalid. Bingung saya jawabnya, karena sebenarnya sudah agan jawab sendiri: untuk mengubah DF jadi 1 gunakan STD.
Kalo utak-atik flag, kira-kira begini:

PUSHF
POP AX
OR AX, flag yang mau dihidupkan (atau gunakan AND untuk mematikan)
PUSH AX
POPF

Just .. make sure you know what you're doing. emoticon-Takut (S)
Quote:Original Posted By peyotpetot
Kalo utak-atik flag, kira-kira begini:

PUSHF
POP AX
OR AX, flag yang mau dihidupkan (atau gunakan AND untuk mematikan)
PUSH AX
POPF

Just .. make sure you know what you're doing. emoticon-Takut (S)



makasih gan. tapi inisial flag apaan ya di assembler. maklum gan, I'm fresh man. jadi blm banyak tau, tadi sempet cari di google dan nyoba2 ga bisa.
Quote:Original Posted By terge
> ya gapapa sih gan, itu di kasih lebih aja range nya.
emoticon-Cape d... (S) Ya ga bisa begitu dong. Agan kopi string sebesar 18 bytes, sedangkan Buffer besarnya cuma 12 bytes. Mau agan taruh ke mana 6 bytes sisanya?

> saya sudah paham apa itu CLD, STD, MOVS, MOVSB, dll.
Seperti inikah pemahaman agan tentang instruksi CLD (yang saya bold)?

Coba agan bandingkan dengan ini.
Dan kalau agan sudah paham instruksi MOVSB, kenapa tidak menggunakan instruksi ini aja (or better yet, REP MOVSB)? MOVS is obsolete.

> saya blm tau gmna caranya agar direction flag nya itu 1, lalu kita pakai STD. agar menurun
Ini pertanyaan agan yang invalid. Bingung saya jawabnya, karena sebenarnya sudah agan jawab sendiri: untuk mengubah DF jadi 1 gunakan STD.


(STD)Menurun <--- DS:SI ---> Menaik(CLD)
itu gan maksudnya, hhe. maklum :-D. tapi sih intinya gmna caranya biar si CLD kalo diganti ama STD jadi work. :-D
Quote:Original Posted By ranggarain



makasih gan. tapi inisial flag apaan ya di assembler. maklum gan, I'm fresh man. jadi blm banyak tau, tadi sempet cari di google dan nyoba2 ga bisa.


Gak ada gan ... flag memang seharusnya tidak diutak-atik .. tapi kalo ngebet beneran, ya itu caranya ngakalin.

PUSHF buat menaruh isi flag ke stack,
POP AX buat ambil nilai flag yang tadi di-push dari stack, dimasukin ke AX
kemudian setelah diutak-atik
PUSH AX buat menaruh hasil utak-atik di stack
POPF untuk mengambil dari stack dan memasukkan ke flag

Quote:Original Posted By ranggarain


(STD)Menurun <--- DS:SI ---> Menaik(CLD)
itu gan maksudnya, hhe. maklum :-D. tapi sih intinya gmna caranya biar si CLD kalo diganti ama STD jadi work. :-D

Untuk kasus agan sebenarnya ga cocok pakai decrement, karena pointer SI dan DI harus digeser ke kanan dulu sebanyak data yang akan dikopi minus satu, seperti ini:
Code:
LEA SI, Kalimat+11 
LEA DI, Buffer+11
STD
MOV CX, 12
REP MOVSB

Umumnya operasi string copy selalu dimulai dari pointer awal string dengan cara increment. Hanya pada kasus dimana string SI dan DI yang saling overlapping saja (dan address pointer SI harus berada di bawah address pointer DI) operasi copy string dengan decrement digunakan.

how to change CLD to STD assembly code..
×