有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检查为8085模拟器设置的标志

    byte x = 0x0c;
    byte y = 0x05;

    System.out.println((x&0xf) + (y&0xf)); // if > 15 then af on
    System.out.println((b&0xf) - (c&0xf));  
    System.out.println((int)(b&0xff) + (c&0xff)); // if > 255 then cf on    
    System.out.println(((int)(b&0xff) + (c&0xff)) & 0b10000000); // if 128 sign flag set
    System.out.println((int)(b&0xff) - (c&0xff)); // if less than 0 then cf set
    System.out.println(((int)(b&0xff) - (c&0xff)) & 0b10000000); //if 128 then sign flag set

我正在建立一个8085模拟器,并在算术&;根据逻辑指令,我试图找到一种可靠的方法来检查何时设置或取消设置5个标志

在这5个标志中,符号标志、零标志和奇偶校验标志很容易检查,但进位和辅助进位标志变得复杂。我的方法接近检查携带旗帜&;辅助进位标志贴在上面,看起来不太可靠

欢迎任何更好/更干净/更优化的解决方案。我也一直在使用www.sim8085。com来检查我的小代码片段并检查打开了哪些标志,下面是我的下一个问题:

    mvi a, ffh
    mvi b, cch
    sub b
    hlt

当我运行此代码时,将设置辅助标志。据我所知,辅助标志只有在从低半字节到高半字节有进位时才会设置。因此,我无法理解这背后的逻辑

还想知道所有标志是否仅受累加器更改的影响,或者是否也受其他影响

编辑:

        byte b = 0x2f;
        byte c = 0x2c;

        byte d = (byte) ((byte) (b&0xf) + (c&0xf)); 
        byte e = (byte) ((byte) (b&0xf) + ((~c)&0xf) + 1); 

        int x = (int) ((b&0xff) + (c&0xff));
        int y = (int) ((int) (b&0xff) + ((~c)&0xff) + 1); 

        System.out.println(y);
        System.out.println((d>0xf) + "\t" + (e>0xf));
        System.out.println((x>0xff) + "\t" + (y>0xff));

我试着用这个逻辑来看看它是否适用于所有的数学运算,显然这并不能使它可靠地检查进位或辅助进位标志是否应该被设置。请帮助我了解如何可靠地检查操作是否导致设置或取消设置进位标志和辅助进位标志


共 (1) 个答案

  1. # 1 楼答案

            byte b = (byte) 0x1c;
            byte c = (byte) 0xff;
    
            char a = (char) (Byte.toUnsignedInt(b) + Byte.toUnsignedInt(c));
            char d = (char) (Byte.toUnsignedInt(b) - Byte.toUnsignedInt(c));
    
            System.out.println(Integer.toHexString(a));
            System.out.println(Integer.toHexString(d));
    
            if(a > 0xff) {
                System.out.println("Add Carry");
            }
    
            if(d > 0xff) {
                System.out.println("Sub Carry");
            }
    
            if((Byte.toUnsignedInt(b) & 0xf) + (Byte.toUnsignedInt(c) & 0xf) > 0xf) {
                System.out.println("Add Aux Carry");
            }
    
            if((Byte.toUnsignedInt(b) & 0xf) + (Byte.toUnsignedInt((byte) ~c) & 0xf) + 1 > 0xf) {
                System.out.println("Sub Aux Carry");
            }
    

    我做了一些进一步的检查,发现char数据类型在java中是无符号的,因此它可以与上面的逻辑一起使用,以获得所需的结果