zoukankan      html  css  js  c++  java
  • 初学 Delphi 嵌入汇编[29] 寄存器所能接受的数值范围

    譬如 EAX AX AH AL 四个储存器, 真实存在的其实只有一个 EAX, AX AH AL 不过是不同的访问方式.
    11111111 11111111 11111111 11111111 : EAX
    11111111 11111111 11111111 11111111 : AX
    11111111 11111111 11111111 11111111 : AH
    11111111 11111111 11111111 11111111 : AL

    //譬如 AX 是一个16位2字节储存器, 它能接受的最大整数是 65535
    {下面函数会返回 65535}
    function Fun: Integer;
    asm
      mov ax, 65535 {给 AX 赋值就是给 EAX 赋值}
    end;
    
    {下面函数会出错}
    function Fun: Integer;
    asm
      mov ax, 65536 {超出了 AX 的容量}
    end;
    
    //同样给 AL AH 赋值不能超过 255 {下面函数会返回 255} function Fun: Integer; asm mov al, 255 end; {下面函数会返回 65280} function Fun: Integer; asm mov ah, 255 end; {为什么不是 255? 因为给 AH 赋值 255 后, EAX 中的值是 00000000 00000000 11111111 000000002}
    //上面演示的是通过立即数(常量)赋值, 通过变量也是如此; 但在其他运算中会不会溢出是 CPU 之前不会知道的, 譬如: {下面的函数不会出错, 但返回的是 0 } function Fun: Integer; asm mov eax, 4294967295 {这是 eax 所能接受的最大整数} add eax, 1 {再 +1 就放不下了} end; {因为结果会是: 1 00000000 00000000 00000000 000000002; EAX 只能放下32位, 前面的一位就被忽略了.}
    //如果 AX 溢出, EAX 会不会接着? {下面的函数也会返回 0 , 看来不会进位到 EAX; AX 虽然是 EAX 的一部分, 但使用时也是相对独立的} function Fun: Integer; asm mov ax, 65535 add ax, 1 end;
    //AH AL 也是如此 {返回 0} function Fun: Integer; asm mov al, 255 add al, 1 end;
    //对于负数呢? {下面函数不会有问题, 返回 -1 } function Fun: Integer; asm mov eax, -1 end;
    {它们能接受的最小负整数分别是: } function Fun: Integer; asm mov al, -256 mov ah, -256 mov ax, -63356 mov eax, -4294967296 end; {再小于这个数字就会报错! }
    //但它们的返回值缺不能所愿, 譬如: {下面函数会返回 0 } function Fun: Integer; asm mov eax, -4294967296 end; {这个好理解, 函数的返回值是 Integer; Integer 的最小值是 -2147483648; 怎么可能放得下 -4294967296? 又被忽略了.}
    //其他情况也大概如此, 现在给 AX 一个绝对放得下的一个值: -1 {竟然返回一个正数: 65535, 为什么?} function Fun: Integer; asm mov ax, -1 end; { 因为 -1 在 AX 中被存为: 11111111 111111112; 这样 EAX 的值是: 00000000 00000000 11111111 111111112; EAX 的最高位只有是 1 才有可能是个负数, 现在 EAX 中的值就是: 65535 }
    //下面两个函数也是同样的道理: {返回 255} function Fun: Integer; asm mov al, -1 end; {返回 65280} function Fun: Integer; asm mov ah, -1 end;
    //其他允许单独访问低16位和低8位的32位寄存器, 情况肯定也是如此.
  • 相关阅读:
    Vue路由和组件分别在什么场景使用
    mybatis返回集合对象包含List<String>
    vue登录页+验证码+MD5加密
    mybatis 查询树形结构
    解决Vue Router报错 Error: Cannot find module ‘@/views/xxx‘ at webpackEmptyContext
    HttpServletRequest 在Filter中添加header
    CRM体系中的SFA(SaleForce Automation)应该怎么设计?
    Google Analytics Advertisement 广告 URL : 数据产品知识 UTM
    Win11要的TPM 2.0不一定是独立芯片,你的CPU固件可能已经支持 || 杨澜对话尹志尧:美国顶尖半导体专家华人很多,国内却奇缺
    mysql SQL注入攻击 解决Orm工具Hibernate,Mybatis, MiniDao 的 sql 预编译语句 ;解决非Orm工具JDBCTemplate的
  • 原文地址:https://www.cnblogs.com/del/p/1059179.html
Copyright © 2011-2022 走看看