我对编码有点困惑.据我所知,旧的ASCII字符每个字符占用一个字节.Unicode字符需要多少字节?
我假设一个Unicode字符可以包含来自任何语言的每个可能的字符 - 我是否正确?那么每个字符需要多少字节?
UTF-7,UTF-6,UTF-16等是什么意思?它们是不同版本的Unicode吗?
我在Ubuntu 13.10(64位)的主文件夹中有一个交叉编译器.我下载了它在这里在页面的底部,它说:"预建的工具链".当我尝试编译它时,它给了我这个:
cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
稍微晃了一下后我发现了这个.我尝试了作者写的命令进入; 但他们不会帮助我,因为我在家庭词典中使用交叉编译器时遇到了这个问题,而不是系统编译器.有人可以帮忙吗?
编辑:这是我试图交叉编译的文件:
void print(char *message, int line,int ch){
char *vm=(char *)0xb8000;
int i=(line*80*2);
i=i+(ch*2);
while(*message!=0){
if (*message=='\n'){line++;
i=(line*80*2);}
else {vm[i]=*message;
i++;
vm[i]=0x07;
i++;} *message++;}}
void kernel_main(){
print("Hello!\nHow do you like my kernel?",0,0);}
Run Code Online (Sandbox Code Playgroud)
我还有一个用AT&T语法编写的汇编文件调用kernel_main().
我正在尝试按照我在此处找到的说明安装交叉编译器.我使用的是64位版本的Ubuntu 13.10.一旦我输入配置binutils的命令,我得到:
Configuring for a x86_64-unknown-linux-gnu host.
Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognized
Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognized
Unrecognized host system name x86_64-unknown-linux-gnu.
Run Code Online (Sandbox Code Playgroud)
是否真的有64位版本的binutils?如果没有,任何人都可以告诉我要输入什么命令以避免此错误?
1.
TEST EAX,EAX
JNZ SHORT program.00407190
Run Code Online (Sandbox Code Playgroud)
2.
XOR EAX,EAX
JNZ SHORT program.00407190
Run Code Online (Sandbox Code Playgroud)
如果我错了,请纠正我.谢谢!:)
根据我的理解到目前为止:
JNZ如果不等于零则跳跃,它将跳转或不跳,取决于是否ZF设置为1.如果是1,它就不会跳跃.否则,它会跳跃.
根据我对代码#1的理解,TEST EAX,EAX将检查它是否为零.如果它不等于零(ZF为0),它将跳转到地址00407190.
对于代码#2,
XOR EAX,EAX将EAX寄存器设置为0.是否设置了任何标志?如果没有,JNZ指令如何确定跳转?
最后,人们为什么要检查是否EAX为0?请帮助我更简单详细的解释,我还是初学者.
我试图用NASM汇编文件,但它指向文件中的这一行:
mov al, byte ptr es:[bx]
Run Code Online (Sandbox Code Playgroud)
说:
error: comma, colon or end of line expected
Run Code Online (Sandbox Code Playgroud)
我在该网站上发现了一个页面,上面写着NASM不喜欢“ ptr”一词,如果我这样写,会很高兴的:
mov al, byte es:[bx]
Run Code Online (Sandbox Code Playgroud)
代替。所以我拿出“ ptr”一词,NASM仍然不高兴。当我省略“ ptr”一词时,这是NASM给我的:
warning: register size specification ignored
Run Code Online (Sandbox Code Playgroud)
和:
error: invalid combination of opcode and operands
Run Code Online (Sandbox Code Playgroud)
这是一个陷阱22!不管我是否输入“ ptr”一词,NASM都很生气。有人可以帮我吗?
在 x86 实模式下重启非常简单。您可以使用 BIOS 或:
jmp 0xFFFF:0000
Run Code Online (Sandbox Code Playgroud)
但是在保护模式下应该如何重新启动?
假设我们想在EDI存储一个字符串.以这种方式存储它会更快吗?
mov byte [edi],0
mov byte [edi+1],1
mov byte [edi+2],2
mov byte [edi+3],3
...
Run Code Online (Sandbox Code Playgroud)
还是这样?
mov byte [edi],0
inc edi
mov byte [edi],1
inc edi
mov byte [edi],2
inc edi
mov byte [edi],3
inc edi
...
Run Code Online (Sandbox Code Playgroud)
有些人可能会在小端看到以下内容:
mov dword [edi],0x3210
Run Code Online (Sandbox Code Playgroud)
或者以下是big-endian:
mov dword [edi],0x0123
Run Code Online (Sandbox Code Playgroud)
但这不是我的问题.我的问题是,增加指针然后执行mov需要更多指令是否更快,或者更快地在每个mov指令中指定添加到EDI指向的偏移地址的数量?如果后者为真,那么在将多少个具有相同数字的mov指令添加到偏移地址之后,是否值得将该数量添加到指针?换句话说,就是这样
mov byte [edi+5],0xFF
mov byte [edi+5],0xFF
mov byte [edi+5],0xFF
mov byte [edi+5],0xFF
Run Code Online (Sandbox Code Playgroud)
比这更快?
add edi,5
mov byte [edi],0xFF
mov byte [edi],0xFF
mov byte [edi],0xFF
mov byte [edi],0xFF
Run Code Online (Sandbox Code Playgroud) 我对PCI有疑问.PCI有三个地址空间; PCI I/O,PCI内存和PCI配置空间.他们每个人身处何处?在PCI控制器?还是在设备中?它们中的任何一个都是系统RAM的一部分吗?
我想将用户输入的号码输入寄存器。这是我自己的操作系统。所以,我不能使用这个:
mov al,0x01
int 0x21
mov dl,al ;move the integer entered by the user, into dl
Run Code Online (Sandbox Code Playgroud)
因为 int 0x21 调用 ms-dos。那么我可以使用什么中断呢?
我在我的ubuntu操作系统上运行gcc.我在c中编写了一个小程序并尝试编译它.它的输出是像在Windows上一样的a.out.如何让它发布Linux可执行文件?
我正在尝试编写一个引导扇区,将字符串打印到屏幕上。我正在使用 nasm。我的教程说,当调用 int 10h 时,您已将值 07h 放入 bl 中。这是文本的颜色。我尝试将 bl 的值更改为 08h 但它没有打印任何内容!所以我尝试将其更改为06h,但仍然没有任何结果!是否可以使用 bl 中的值更改颜色?如果是这样,什么值与什么颜色相匹配?
如果我更改 ah 中的值,int 10h 会执行其他操作(例如将文本扫描到 al 中)吗?