小编Isa*_*hen的帖子

一个Unicode字符占用多少字节?

我对编码有点困惑.据我所知,旧的ASCII字符每个字符占用一个字节.Unicode字符需要多少字节?

我假设一个Unicode字符可以包含来自任何语言的每个可能的字符 - 我是否正确?那么每个字符需要多少字节?

UTF-7,UTF-6,UTF-16等是什么意思?它们是不同版本的Unicode吗?

我阅读了有关Unicode维基百科文章,但这对我来说非常困难.我期待看到一个简单的答案.

language-agnostic string unicode encoding

224
推荐指数
8
解决办法
29万
查看次数

cc1:加载共享库时出错:libmpc.so.2:无法打开共享对象文件:没有这样的文件或目录

我在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().

cross-compiling

10
推荐指数
2
解决办法
2万
查看次数

是否有x86_64的另一个版本的binutils?

我正在尝试按照我在此处找到的说明安装交叉编译器.我使用的是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?如果没有,任何人都可以告诉我要输入什么命令以避免此错误?

binutils

6
推荐指数
1
解决办法
3267
查看次数

这个汇编代码有什么作用?(TEST,XOR,JNZ)

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?请帮助我更简单详细的解释,我还是初学者.

x86 assembly reverse-engineering

5
推荐指数
1
解决办法
8062
查看次数

NASM“忽略寄存器大小规格”

我试图用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都很生气。有人可以帮我吗?

nasm

5
推荐指数
1
解决办法
3272
查看次数

在保护模式下重启

在 x86 实模式下重启非常简单。您可以使用 BIOS 或:

jmp 0xFFFF:0000
Run Code Online (Sandbox Code Playgroud)

但是在保护模式下应该如何重新启动?

x86 osdev

5
推荐指数
1
解决办法
868
查看次数

增加指针比执行"mov [pointer + 1],eax"更快吗?

假设我们想在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)

x86 assembly

4
推荐指数
1
解决办法
752
查看次数

PCI地址空间

我对PCI有疑问.PCI有三个地址空间; PCI I/O,PCI内存和PCI配置空间.他们每个人身处何处?在PCI控制器?还是在设备中?它们中的任何一个都是系统RAM的一部分吗?

osdev pci

3
推荐指数
1
解决办法
474
查看次数

如何在程序集中获取用户输入

我想将用户输入的号码输入寄存器。这是我自己的操作系统。所以,我不能使用这个:

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。那么我可以使用什么中断呢?

x86 assembly osdev

2
推荐指数
1
解决办法
2万
查看次数

gcc的输出

我在我的ubuntu操作系统上运行gcc.我在c中编写了一个小程序并尝试编译它.它的输出是像在Windows上一样的a.out.如何让它发布Linux可执行文件?

c ubuntu gcc

0
推荐指数
1
解决办法
198
查看次数

调用int 10h时bl的值

我正在尝试编写一个引导扇区,将字符串打印到屏幕上。我正在使用 nasm。我的教程说,当调用 int 10h 时,您已将值 07h 放入 bl 中。这是文本的颜色。我尝试将 bl 的值更改为 08h 但它没有打印任何内容!所以我尝试将其更改为06h,但仍然没有任何结果!是否可以使用 bl 中的值更改颜色?如果是这样,什么值与什么颜色相匹配?

如果我更改 ah 中的值,int 10h 会执行其他操作(例如将文本扫描到 al 中)吗?

x86 assembly

-1
推荐指数
1
解决办法
3604
查看次数