陈贱伟 发表于 2012-11-21 10:09:33

一个操作系统实现里面汇编看不懂


%macro Descriptor 3
dw %2 & 0FFFFh    ; 段界限1
dw %1 & 0FFFFh    ; 段基址1
db (%1 >> 16) & 0FFh   ; 段基址2
dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh) ; 属性1 + 段界限2 + 属性2
db (%1 >> 24) & 0FFh   ; 段基址3
%endmacro ; 共 8 字节

%macro Gate 4
dw (%2 & 0FFFFh)    ; 偏移1
dw %1             ; 选择子
dw (%3 & 1Fh) | ((%4 << 8) & 0FF00h) ; 属性
dw ((%2 >> 16) & 0FFFFh)   ; 偏移2
%endmacro ; 共 8 字节我以前学过汇编但这个汇编我从来没看过
%1 、%2、%3 是什么意思
&    这个又是什么意思
>>   这个又是什么意思
dw %2 & 0FFFFh                还有这个%2 & 0FFFFh 什么意思
dw ((%2 >> 16) & 0FFFFh)还有这个什么意思

或者把这些汇编GDT结构 用C语言方式 表示 比如 mov ax,5相当C语言ax=5


张国祥 发表于 2012-11-21 10:09:34

这是一个宏,是个很巧妙的手法,将分散存储的段基址、段界限、段属性很好的统一了起来,便于查看。
%macro是NASM里的多行宏标识。
这里的意思是定义一个名为Descriptor的标识,存在3个参数,一般默认就是%1~%3.
至于为什么是那个结构,那是因为描述符就是那个样子的,关于描述符是什么书里有说到吧?(GDT或LDT的一个表项)。
%macro Gate 4说明定义了一个Gate标识,有四个参数。这个宏很好的说明了门描述符的结构。
最后,建议lz学点基础性的知识,目前这些不适合你

jun 发表于 2012-12-7 22:46:04

这个Linux下的AT&T的汇编吧,楼主可以自己去看一下,

沮丧的洋葱头 发表于 2012-12-10 13:12:40

慢慢看,没有什么不懂的


页: [1]
查看完整版本: 一个操作系统实现里面汇编看不懂