如何在不使用汇编程序和操作系统的情况下使用机器语言?
如何直接输入0和1?我知道这很愚蠢,但我只想知道它是如何工作的,我可以用机器语言编写程序而不使用汇编程序和操作系统并在操作系统中安装任何其他工具吗?
我可以通过键盘分别输入0和1吗?没有使用操作系统?事实上,编程,从头开始!
答案 0 :(得分:0)
正如评论中指出的那样,你不能再通过弄乱交换机将程序加载到现代计算机内存中,它必须是某种形式的媒体,从广义上说,固件可以加载和执行它。
可以使用编程器在ROM(或类似)中编程固件,这与将0和1写入计算机存储器尽可能接近。请注意,通常机器代码是用十六进制而不是二进制编写的。
在现代操作系统中,您可以使用任何十六进制编辑器编写机器代码,问题是程序二进制文件不包含可执行代码。它们还包含标题和许多“meta”(让我们用这种方式称呼)数据。因此,您必须构建一个包含所有标题,部分等的有效结构 这不是不可能的,一切都归结为一些基本的数学和一个很好的参考,只是它非常乏味。
作为一款游戏,如果你想感受用二进制代码编写程序的旧烦恼,你可以按照迈克尔的建议使用一个启动程序,让你把数字写入内存。
我为IA32写了一个(可能是您的架构),您必须使用NASM来组装它并将512字节输出文件写入任何可启动媒体(Google会帮助您)。然后重新启动计算机。
这里有一些限制(功能?)
Here我为在屏幕上写 Hi 的程序插入机器代码。
这是代码
BITS 16
jmp 07c0h:WORD __START__
__START__:
mov ax, cs
mov ss, ax
xor sp, sp
push cs
pop ds
push 0b800h
pop es
mov di, 200h ;Write binary code from 7c0h:200h to 7c0h:ffffh, i.e. 3,5KiB
.screen_input:
mov ax, 03h
int 10h
xor si, si
.byte_input:
mov cx, 0800h
.bit_input:
xor ah, ah
int 16h
cmp al, 0dh
je .jump
cmp al, '0'
jb .bit_input
cmp al, '1'
ja .bit_input
mov ah, 0ch
mov WORD [es:si], ax
add si, 02h
shr al, 1
rcl cl, 1
dec ch
jnz .bit_input
mov BYTE [di], cl
inc di
add si, 90h
cmp si, 0fa0h
jae .screen_input
jmp .byte_input
.jump:
jmp 7c0h:200h
TIMES 505-($-__START__) db 0
dw 0aa55h