CSAPP:Y86-64指令模拟器

my_code.py

import struct

mem = [""] * 1000       # 存储器
reg = [0] * 16          # 寄存器
stack = [0] * 15        # 栈指针:%rsp=reg[4]
pReg = 0                # PC
iReg = ''               # 当前指令
ZF = 0                  # 零标志位
SF = 0                  # 符号标志位
OF = 0                  # 溢出标志位


def loadProgram(file):
    global pReg, iReg, reg, mem
    fil = open(file, 'r')
    # 前两行是coe格式信息,跳过
    fil.readline()
    fil.readline()
    isStart = True
    while True:
        line = fil.readline()
        address = int(line[0:2], 16)
        if line[2:-1] == '00':
            mem[address] = '00'
            break
        instruc = line[2:-2]
        mem[address] += instruc
        if isStart:
            pReg = address
            isStart = False
    fil.close()


# 用条件码确定是否执行指令,见p139
# 是否相等
def e():
    return ZF


# 是否小于
def l():
    return SF ^ OF


# 是否小于等于
def le():
    return (SF ^ OF) | ZF


# 是否大于
def g():
    return ~(SF ^ OF) & ~ZF


# 是否大于等于
def ge(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值