机器编码。豫
yuyan · 351 行 · 19344 字节 · UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
寻观「标准库」之书。
寻观「标准库」之「数据结构」之「字节串」之书。
寻观「编译器核心」之「网页汇编核心」之「二进制生成」之书。
「:文言:字节自生,标号两遍定之。汉语:机器码、地址和重定位由豫言直接编码,不调用汇编器或链接器。:」
「机器片」立「元类型」也。
「原字节」立化「字节串」而「机器片」也。
「代码标记」立化「字符串」而「机器片」也。
「代码相对」立化「整数」而化「字符串」而「机器片」也。
「代码地址」立化「整数」而化「字符串」而「机器片」也。
「机器符号」即「字符串」
合「整数」
也。
「机器成品」即「字节串」
合(「列」于「机器符号」)
也。
「整数余数」乃化「整数」而化「整数」而「整数」也。
「整数余数」者会「数」而会「除数」而
「减」于「数」于(「乘」于(「除以」于「数」于「除数」)于「除数」)
也。
「:文言:单字节之串,预制二百五十六于表,空串亦预制之,取之唯读表而已。标准库之「单字节串」「空字节串」每用必呼宿主,节点之宿主又经元组之转与缓冲之配;预编大程序时以百万计,回收因之不堪。汉语:单字节串表:模块初始化时一次建好 0 至 255 共 256 个单字节串,空串也预先建好,之后取用只是读数组。标准库的「单字节串」「空字节串」每次都是宿主调用,在 Node 宿主上还要经过元组转换与 Buffer 分配;预编大程序时这类调用数以百万计,拖垮垃圾回收。字节串不可变,共用同一对象无妨。:」
「机器单字节表」乃「数组引用类」于「字节串」也。
「机器单字节表」者
虑「表」者
「新数组引用」授以「字节串」于(「空字节串」于「元」)于「二五六」而
递归虑「填」其化「整数」而「有」者会「位」而
若「小于」于「位」于「二五六」则
((「写数组引用」授以「字节串」于「表」于「位」于(「单字节串」于「位」));
(「填」于(「加」于「位」于「一」)))
否则
「元」
而
虑「无」者「填」于「零」而
「表」
也。
「机器空串」乃「字节串」也。
「机器空串」者「空字节串」于「元」也。
「机器单字节」乃化「整数」而「字节串」也。
「机器单字节」者会「数」而
若「或者」于(「小于」于「数」于「零」)于(「大于」于「数」于「二五五」)则
「发生事故」于『构造单字节串:字节必须在零至二百五十五之间』
否则
「读数组引用」授以「字节串」于「机器单字节表」于「数」
也。
「小端字节」乃化「整数」而化「整数」而「字节串」也。
「小端字节」者会「宽」而会「数」而
若「或者」于(「小于」于「宽」于「零」)于(「大于」于「宽」于「八」)则
「发生事故」于『小端字节宽度须在零至八之间』
否则
若「小于」于「数」于「零」则「发生事故」于『小端编码须为非负整数』否则
若「等于」于「宽」于「零」则
若「等于」于「数」于「零」则「机器空串」否则「发生事故」于『小端整数超出宽度』
否则
若「等于」于「宽」于「一」则
若「小于」于「数」于「二五六」则「机器单字节」于「数」否则「发生事故」
于『小端整数超出宽度』
否则
「拼接字节串」
于(「机器单字节」于(「整数余数」于「数」于「二五六」))
于(「小端字节」于(「减」于「宽」于「一」)于(「除以」于「数」于「二五六」))
也。
「零字节」乃化「整数」而「字节串」也。
「零字节」者会「数」而
若「小于」于「数」于「零」则
「发生事故」于『负填充长度』
否则
若「等于」于「数」于「零」则「机器空串」
否则
若「等于」于「数」于「一」则「机器单字节」于「零」否则
虑「半」者「零字节」于(「除以」于「数」于「二」)而
「网页拼字节」于(「列」【
「半」,
「半」,
若「等于」于(「整数余数」于「数」于「二」)于「零」则「机器空串」否则「机器单字节」
于「零」
】)
也。
「字节片」乃化(「列」于「整数」)而「机器片」也。
「字节片」者会「项」而
「原字节」于(「网页拼字节」于(「态射」于「项」于「机器单字节」))
也。
「字片」乃化「整数」而「机器片」也。
「字片」者会「数」而
「原字节」于(「小端字节」于「四」于「数」)
也。
「:文言:臂之分支,类一二为跳与呼,三至九及二四至三零为条件,三二至六二为零则跳,六四至九四为非零则跳;兼容之分支,类一零至二三及一百以上。汉语:类号决定编码族与长度。ARM64:一 B,二 BL,三至九依次是 EQ NE CS CC MI PL VS,二四至三零依次是 VC HI LS GE LT GT LE,三二至六二是 CBZ 寄存器类减三二,六四至九四是 CBNZ 寄存器类减六四,均为四字节。AMD64:一零 call,一一 jmp,一二至二三是既有条件跳,一百至一一五是 0F 8x 条件跳,其中类减一百为条件码,可表示 jb 与 jae。:」
「臂分支类」乃化「整数」而「爻」也。
「臂分支类」者会「类」而
「或者」于(「小于」于「类」于「一零」)于(「且」于(「大于」于「类」于「二三」)于(「小于」于「类」于「九五」))
也。
「机器片长」乃化「机器片」而「整数」也。
「机器片长」者会「片」而
鉴「片」而
有「原字节」于「字」则
「字节串长度」于「字」
或有「代码标记」于「名」则「零」
或有「代码地址」于「宽」于「名」则「宽」
或有「代码相对」于「类」于「名」则
若「臂分支类」于「类」则「四」
否则
若「小于」于「类」于「一二」则「五」否则「六」
也。
「机器寻址」乃化(「列」于「机器符号」)而化「字符串」而「整数」也。
「机器寻址」者会「项」而会「名」而
鉴「项」而
有「罄」则「发生事故」于(『机器符号不存在:』附「名」)
或有「缀」于「首」于「尾」则
若「串相等」于「名」于(「首」中「零」)则「首」中「一」否则「机器寻址」于「尾」于「名」
也。
「:文言:符号之表:以名之散列分桶,插与寻皆近常时;昔以列表,插则遍查重名、寻则遍历,符号至百万则不可行。汉语:符号哈希表:按名字的散列值分到 262144 个桶里,插入(同时查重名)与查找都接近常数时间。原先用列表,插入时要遍历查重、每次寻址也要遍历,预编大程序时标签以百万计,就跑不完了。:」
「机器符号表」即「数组引用类」于(「列」于「机器符号」)也。
「机器表桶数」乃「整数」也。
「机器表桶数」者「二六二一四四」也。
「机器串散列」乃化「字符串」而「整数」也。
「机器串散列」者会「名」而
虑「字」者「字符串转字节串」于「名」而
虑「长」者「字节串长度」于「字」而
递归虑「逐」其化「整数」而化「整数」而「整数」者会「位」而
会「和」而
若「非」于(「小于」于「位」于「长」)则
「整数余数」于「和」于「机器表桶数」
否则
「逐」
于(「加」于「位」于「一」)
于(「整数余数」
于(「加」于(「乘」于「和」于「三一」)于(「字节串取字节」于「字」于「位」))于「一六七七七二一三」)
而
「逐」于「零」于「五三八一」
也。
「机器表插」乃化「机器符号表」而化「字符串」而化「整数」而「有」也。
「机器表插」者会「表」而会「名」而会「址」而
虑「桶号」者「机器串散列」于「名」而
虑「桶」者「读数组引用」授以(「列」于「机器符号」)于「表」于「桶号」而
若「存在吗」授以「机器符号」
于(会「符」而「串相等」于「名」于(「符」中「零」))
于「桶」则
「发生事故」于(『机器标记重名:』附「名」)
否则
「写数组引用」授以(「列」于「机器符号」)
于「表」
于「桶号」
于(「缀」于(「名」与「址」)于「桶」)
也。
「机器表寻」乃化「机器符号表」而化「字符串」而「整数」也。
「机器表寻」者会「表」而会「名」而
「机器寻址」于(「读数组引用」授以(「列」于「机器符号」)于「表」于(「机器串散列」于「名」))
于「名」
也。
「:文言:收符号:遍诸片,记标之址于表,并成列(供外用)。汉语:收集符号:遍历机器片,把每个标记的地址记进哈希表(查重名),同时累积成列表(机器成品对外给出)。:」
「机器收符号表」乃
化「机器符号表」而
化「整数」而
化(「列」于「机器片」)而
化(「列」于「机器符号」)而
(「列」于「机器符号」)
也。
「机器收符号表」者会「表」而会「址」而会「片」而会「符号」而
鉴「片」而
有「罄」则「符号」
或有「缀」于「首」于「尾」则
虑「后」者
(
鉴「首」而
有「代码标记」于「名」则
((「机器表插」于「表」于「名」于「址」);
(「缀」于(「名」与「址」)于「符号」))
或有「其他」则「符号」
)
而
「机器收符号表」于「表」于(「加」于「址」于(「机器片长」于「首」))于「尾」于「后」
也。
「机器收符号」乃
化「整数」而
化(「列」于「机器片」)而
化(「列」于「机器符号」)而
(「列」于「机器符号」)
也。
「机器收符号」者会「址」而会「片」而会「符号」而
鉴「片」而
有「罄」则「符号」
或有「缀」于「首」于「尾」则
虑「后」者
(
鉴「首」而
有「代码标记」于「名」则
若「存在吗」授以「机器符号」
于(会「符」而「串相等」于「名」于(「符」中「零」))于「符号」则
「发生事故」于『机器标记重名』
否则
「缀」于(「名」与「址」)于「符号」
或有「其他」则「符号」
)
而
「机器收符号」于(「加」于「址」于(「机器片长」于「首」))于「尾」于「后」
也。
「有界位移」乃化「整数」而化「整数」而「整数」也。
「有界位移」者会「值」而会「界」而
若「或者」于(「小于」于「值」于(「减」于「零」于「界」))
于(「非」于(「小于」于「值」于「界」))则「发生事故」于『机器相对分支超出范围』
否则若「小于」于「值」于「零」则「加」于「值」于(「乘」于「界」于「二」)否则「值」
也。
「:文言:有界之位移,逾则报其标与距。十九位之立即数唯条件之分支用之,须待择定编码之后方计,否则远之 b 与 bl 亦被误判为逾界。汉语:同 有界位移,超出范围时在报错里带上目标标签名与距离,便于定位。注意 19 位立即数只有条件分支用,必须在确定是条件分支之后才计算,否则 ±1 MiB 以外的 b、bl 也会被误判为超出范围(代码很大时才会遇到)。:」
「有界位移名」乃化「整数」而化「整数」而化「字符串」而「整数」也。
「有界位移名」者会「值」而会「界」而会「名」而
若「或者」于(「小于」于「值」于(「减」于「零」于「界」))
于(「非」于(「小于」于「值」于「界」))则
「发生事故」于(『机器相对分支超出范围:』附「名」附『,距离 』附(「整数表示」于「值」)附『,界 』附(「整数表示」
于「界」))
否则
「有界位移」于「值」于「界」
也。
「机器解片」乃
化「机器符号表」而
化「整数」而
化「机器片」而
「字节串」
也。
「机器解片」者会「符」而会「址」而会「片」而
鉴「片」而
有「原字节」于「字」则「字」
或有「代码标记」于「名」则「机器空串」
或有「代码地址」于「宽」于「名」则
「小端字节」于「宽」于(「机器表寻」于「符」于「名」)
或有「代码相对」于「类」于「名」则
虑「差」者「减」于(「机器表寻」于「符」于「名」)于「址」而
若「臂分支类」于「类」则
若「不等于」于(「整数余数」于「差」于「四」)于「零」则
「发生事故」于『臂架构分支未按字对齐』
否则
虑「偏」者「除以」于「差」于「四」
而
虑「码」者
若「小于」于「类」于「三」则
「加」
于(若「等于」于「类」于「一」则「三三五五四四三二零」否则「二四八三零二七九六八」)
于(「有界位移名」于「偏」于「三三五五四四三二」于「名」)
否则
虑「立十九」者
「乘」
于(「有界位移名」于「偏」于「二六二一四四」于「名」)
于「三二」
而
若「小于」于「类」于「一零」则
「加」
于(「加」于「一四零九二八六一四四」于「立十九」)
于(「减」于「类」于「三」)
否则若「小于」于「类」于「三一」则
「加」
于(「加」于「一四零九二八六一四四」于「立十九」)
于(「减」于「类」于「一七」)
否则若「小于」于「类」于「六三」则
「加」
于(「加」于「八七二四一五二三二」于「立十九」)
于(「减」于「类」于「三二」)
否则
「加」
于(「加」于「八八九一九二四四八」于「立十九」)
于(「减」于「类」于「六四」)
而
「小端字节」于「四」于「码」
否则
虑「头」者
((「列」于「整数」)也
若「等于」于「类」于「一零」则(「列」【「二三二」】)
否则
若「等于」于「类」于「一一」则(「列」【「二三三」】)
否则
若「小于」于「类」于「一零零」则(「列」【「一五」,「加」于「一三二」于(「减」于「类」于「一二」)】)
否则
(「列」【「一五」,「加」于「一二八」于(「减」于「类」于「一零零」)】)
)
而
「拼接字节串」
于(「网页拼字节」于(「态射」于「头」于「机器单字节」))
于(「小端字节」
于「四」
于(「有界位移」于(「减」于「差」于(「机器片长」于「片」))于「二一四七四八三六四八」))
也。
「:文言:近连之符号表:每连一次,存其表于此,供写可执行文件时生调试之符号;旁路也,不改所生之码。汉语:最近一次连接的符号哈希表:连接机器代码每次覆盖它,写出可执行文件时据此生成调试符号表(函数名与地址)。这是旁路,不影响生成的代码;初值是空表。:」
「机器最近表」乃「引用类」于「机器符号表」也。
「机器最近表」者
「新引用」授以「机器符号表」
于(「新数组引用」授以(「列」于「机器符号」)于(「罄」授以「机器符号」)于「机器表桶数」)
也。
「连接机器代码」乃化「整数」而化(「列」于「机器片」)而「机器成品」也。
「连接机器代码」者会「基址」而会「片」而
虑「表」者
「新数组引用」授以(「列」于「机器符号」)
于(「罄」授以「机器符号」)
于「机器表桶数」而
虑「符」者
「机器收符号表」于「表」于「基址」于「片」于(「罄」授以「机器符号」)而
虑「无」者「写引用」授以「机器符号表」于「机器最近表」于「表」而
虑「址」者「新引用」授以「整数」于「基址」而
虑「字」者
「态射」授以「机器片」授以「字节串」
于「片」
于(会「项」而
虑「当前」者「读引用」授以「整数」于「址」而
虑「进」者
「写引用」授以「整数」
于「址」
于(「加」于「当前」于(「机器片长」于「项」))
而
「机器解片」于「表」于「当前」于「项」
)
而
(「网页拼字节」于「字」)与「符」
也。
「定位拼合」乃化「整数」而化(「列」于(「整数」合「字节串」))而「字节串」也。
「定位拼合」者会「始」而会「项」而
鉴「项」而
有「罄」则「机器空串」
或有「缀」于「首」于「尾」则
若「小于」于(「首」中「零」)于「始」则
「发生事故」于『镜像片段重叠』
否则
「网页拼字节」于(「列」【
「零字节」于(「减」于(「首」中「零」)于「始」),
「首」中「一」,
「定位拼合」
于(「加」于(「首」中「零」)于(「字节串长度」于(「首」中「一」)))
于「尾」
】)
也。