kode mesin x86, 162 byte
PROG.COM Unduh dan jalankan dalam emulator MS-DOS , misalnya DOSBox .
90 B3 B4 B4 02 90 90 B3 B2 B2 48 90 90 B3 CD CD 21 90 90 B3 B2 B2 65 90
90 B3 CD CD 21 90 90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 CD CD 21 90
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 2C 90 90 B3 CD CD 21 90
90 B3 B2 B2 20 90 90 B3 CD CD 21 90 90 B3 B2 B2 77 90 90 B3 CD CD 21 90
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 72 90 90 B3 CD CD 21 90
90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 B2 B2 64 90 90 B3 CD CD 21 90
90 B3 B2 B2 21 90 90 B3 CD CD 21 90 90 B3 CD CD 20 90
setelah penghapusan MINI.COM Unduh
90 B4 02 90 B2 48 90 CD 21 90 B2 65 90 CD 21 90 B2 6C 90 CD 21 90 CD 21
90 B2 6F 90 CD 21 90 B2 2C 90 CD 21 90 B2 20 90 CD 21 90 B2 77 90 CD 21
90 B2 6F 90 CD 21 90 B2 72 90 CD 21 90 B2 6C 90 CD 21 90 B2 64 90 CD 21
90 B2 21 90 CD 21 90 CD 20
Bagaimana cara menjalankannya?
Instal DOSBox, untuk Ubuntu / Debian
sudo apt install dosbox
Menjalankannya
dosbox
Dalam DOSBOX
mount c /home/user/path/to/your/directory
c:
PROG.COM
MINI.COM
Bagaimana cara kerjanya?
Kode pengoperasian mesin mewakili instruksi bahasa rakitan .
Dalam MS-DOS untuk mencetak karakter Anda akan mengatur register dan membuat interupsi. Daftar AH akan menjadi 0x02, register DL berisi karakter Anda. Vektor interupsi adalah 0x21.
mov ah,0x2 ;AH register to 0x2 (B4 02)
mov dl,0x48 ;DL register to "H" (B2 48)
int 0x21 ;0x21 interrupt (CD 21)
File kecil model MS-DOS COM adalah pilihan yang bagus, karena tidak memiliki header . Ini dibatasi oleh 64K, tetapi dalam kasus kami itu tidak masalah.
Untuk menghentikan program gunakan interupsi 0x20
int 0x20 ;0x20 interrupt (CD 20)
Sihir
Jika Anda ingin menjalankan perintah 0xAB opcode dengan satu parameter 0xCD , Anda menulis
AB CD
Di PROG.COM
90 B3 AB AB CD 90
nop ; No operation (90)
mov bl,0xb4 ; BL register to AB (B3 AB)
AB CD command (AB CD)
nop ; No operation (90)
Di MINI.COM
90 AB CD
nop ; No operation (90)
AB CD command (AB CD)
Ini sama dengan kode mesin, jika Anda tidak menggunakan register BL .
Generator
Konversi file teks dengan hex ke hex binary
cat hex_file | xxd -r -p > exec.com
function byte2hex(byte){
var ret=byte.toString(16).toUpperCase();
return ret.length==1 ? "0"+ret : ret;
}
function str2hex(str){
var ret = [];
for(var i=0;i<str.length;i++){
ret.push(byte2hex(str.charCodeAt(i)));
}
return ret;
}
function genCode(hexArr){
var ret = [["B4","02"]];
for(var i=0;i<hexArr.length;i++){
if(hexArr[i]!=hexArr[i-1]){
ret.push(["B2",hexArr[i]]);
}
ret.push(["CD","21"]);
}
ret.push(["CD","20"]);
return ret;
}
function magicCode(str){
var ret=[""];
var code=genCode(str2hex(str));
for(var i=0;i<code.length;i++){
ret.push("90 B3 "+code[i][0]+" "+code[i][0]+" "+code[i][1]+" 90");
if(i%4==3){ret.push("\n");}
}
return ret.join(" ");
}
function magicCodeMinified(str){
var ret=[""];
var code=genCode(str2hex(str));
for(var i=0;i<code.length;i++){
ret.push("90 "+code[i][0]+" "+code[i][1]);
if(i%8==7){ret.push("\n");}
}
return ret.join(" ");
}
var str=prompt("string","Hello, world!");
var out="PROG.COM\n" + magicCode(str)+"\n\nMINI.COM\n"+magicCodeMinified(str);
document.write(out.replace("\n","<br>"));
alert(out);