csapp archlab part 1

part A

在这里插入图片描述

[root@edb3963640a6 misc]#./yas sum.ys 
[root@edb3963640a6 misc]# ./yis sum.yo

./yas 和 ./yis 是汇编语言编译器和模拟器的命令行工具。
./yas 是一个汇编语言编译器,它将汇编语言代码转换为可执行的二进制文件。./yas sum.ys 将sum.ys文件编译成了sum.yo可执行文件。
./yis 是一个模拟器,它用于执行和模拟已编译的二进制文件。运行./yis sum.yo 将执行sum.yo文件并输出结果。
这两个工具通常用于汇编语言的开发和调试过程中。

在这里插入图片描述
在这里插入图片描述

part B

使用的Y86-64指令需要先使用irmovq指令将一个寄存器设置为常量,然后使用addq指令将这个值添加到目标寄存器。假设我们想要添加一个新的指令iaddq
在这里插入图片描述
在这里插入图片描述
参考知乎网友写的 iaddq指令的处理阶段, 使用hcl语言写出这个流程。
seq-full.hcl 文件:
在这里插入图片描述
执行 make VERSION=full
在这里插入图片描述

在asumi.yo 文件中调用iaddq指令
在这里插入图片描述

执行 ./ssim -t …/y86-code/asumi.yo

[root@edb3963640a6 seq]# ./ssim -t ../y86-code/asumi.yo
Y86-64 Processor: seq-full.hcl
137 bytes of code read
IF: Fetched irmovq at 0x0.  ra=----, rb=%rsp, valC = 0x100
IF: Fetched call at 0xa.  ra=----, rb=----, valC = 0x38
Wrote 0x13 to address 0xf8
IF: Fetched irmovq at 0x38.  ra=----, rb=%rdi, valC = 0x18
IF: Fetched irmovq at 0x42.  ra=----, rb=%rsi, valC = 0x4
IF: Fetched call at 0x4c.  ra=----, rb=----, valC = 0x56
Wrote 0x55 to address 0xf0
IF: Fetched xorq at 0x56.  ra=%rax, rb=%rax, valC = 0x0
IF: Fetched andq at 0x58.  ra=%rsi, rb=%rsi, valC = 0x0
IF: Fetched jmp at 0x5a.  ra=----, rb=----, valC = 0x83
IF: Fetched jne at 0x83.  ra=----, rb=----, valC = 0x63
IF: Fetched mrmovq at 0x63.  ra=%r10, rb=%rdi, valC = 0x0
IF: Fetched addq at 0x6d.  ra=%r10, rb=%rax, valC = 0x0
IF: Fetched iaddq at 0x6f.  ra=----, rb=%rdi, valC = 0x8
IF: Fetched iaddq at 0x79.  ra=----, rb=%rsi, valC = 0xffffffffffffffff
IF: Fetched jne at 0x83.  ra=----, rb=----, valC = 0x63
IF: Fetched mrmovq at 0x63.  ra=%r10, rb=%rdi, valC = 0x0
IF: Fetched addq at 0x6d.  ra=%r10, rb=%rax, valC = 0x0
IF: Fetched iaddq at 0x6f.  ra=----, rb=%rdi, valC = 0x8
IF: Fetched iaddq at 0x79.  ra=----, rb=%rsi, valC = 0xffffffffffffffff
IF: Fetched jne at 0x83.  ra=----, rb=----, valC = 0x63
IF: Fetched mrmovq at 0x63.  ra=%r10, rb=%rdi, valC = 0x0
IF: Fetched addq at 0x6d.  ra=%r10, rb=%rax, valC = 0x0
IF: Fetched iaddq at 0x6f.  ra=----, rb=%rdi, valC = 0x8
IF: Fetched iaddq at 0x79.  ra=----, rb=%rsi, valC = 0xffffffffffffffff
IF: Fetched jne at 0x83.  ra=----, rb=----, valC = 0x63
IF: Fetched mrmovq at 0x63.  ra=%r10, rb=%rdi, valC = 0x0
IF: Fetched addq at 0x6d.  ra=%r10, rb=%rax, valC = 0x0
IF: Fetched iaddq at 0x6f.  ra=----, rb=%rdi, valC = 0x8
IF: Fetched iaddq at 0x79.  ra=----, rb=%rsi, valC = 0xffffffffffffffff
IF: Fetched jne at 0x83.  ra=----, rb=----, valC = 0x63
IF: Fetched ret at 0x8c.  ra=----, rb=----, valC = 0x0
IF: Fetched ret at 0x55.  ra=----, rb=----, valC = 0x0
IF: Fetched halt at 0x13.  ra=----, rb=----, valC = 0x0
32 instructions executed
Status = HLT
Condition Codes: Z=1 S=0 O=0
Changed Register State:
%rax:   0x0000000000000000      0x0000abcdabcdabcd
%rsp:   0x0000000000000000      0x0000000000000100
%rdi:   0x0000000000000000      0x0000000000000038
%r10:   0x0000000000000000      0x0000a000a000a000
Changed Memory State:
0x00f0: 0x0000000000000000      0x0000000000000055
0x00f8: 0x0000000000000000      0x0000000000000013
ISA Check Succeeds
[root@edb3963640a6 seq]# 

执行 testssim

[root@edb3963640a6 y86-code]# make testssim
../seq/ssim -t asum.yo > asum.seq
../seq/ssim -t asumr.yo > asumr.seq
../seq/ssim -t cjr.yo > cjr.seq
../seq/ssim -t j-cc.yo > j-cc.seq
../seq/ssim -t poptest.yo > poptest.seq
../seq/ssim -t pushquestion.yo > pushquestion.seq
../seq/ssim -t pushtest.yo > pushtest.seq
../seq/ssim -t prog1.yo > prog1.seq
../seq/ssim -t prog2.yo > prog2.seq
../seq/ssim -t prog3.yo > prog3.seq
../seq/ssim -t prog4.yo > prog4.seq
../seq/ssim -t prog5.yo > prog5.seq
../seq/ssim -t prog6.yo > prog6.seq
../seq/ssim -t prog7.yo > prog7.seq
../seq/ssim -t prog8.yo > prog8.seq
../seq/ssim -t ret-hazard.yo > ret-hazard.seq
grep "ISA Check" *.seq
asum.seq:ISA Check Succeeds
asumr.seq:ISA Check Succeeds
cjr.seq:ISA Check Succeeds
j-cc.seq:ISA Check Succeeds
poptest.seq:ISA Check Succeeds
prog1.seq:ISA Check Succeeds
prog2.seq:ISA Check Succeeds
prog3.seq:ISA Check Succeeds
prog4.seq:ISA Check Succeeds
prog5.seq:ISA Check Succeeds
prog6.seq:ISA Check Succeeds
prog7.seq:ISA Check Succeeds
prog8.seq:ISA Check Succeeds
pushquestion.seq:ISA Check Succeeds
pushtest.seq:ISA Check Succeeds
ret-hazard.seq:ISA Check Succeeds
rm asum.seq asumr.seq cjr.seq j-cc.seq poptest.seq pushquestion.seq pushtest.seq prog1.seq prog2.seq prog3.seq prog4.seq prog5.seq prog6.seq prog7.seq prog8.seq ret-hazard.seq

在这里插入图片描述

测试iaddq 指令:
make SIM=…/seq/ssim TFLAGS=-i

在这里插入图片描述

汇编

irmovq 指令

irmovq指令是x86汇编语言中的一条指令,用于将立即数(即常数)加载到寄存器中。这个指令主要用于将一个立即数加载到目标寄存器中,而不是从内存中读取数据。

irmovq指令的具体格式如下:

irmovq 立即数, 寄存器

其中立即数表示要加载到寄存器的常数值,寄存器表示要将常数加载到的目标寄存器。

举个例子,如果我们要将立即数0x123456789abcdef0加载到寄存器%rdx中,我们可以使用irmovq指令:

irmovq $0x123456789abcdef0, %rdx

这条指令的作用是将立即数0x123456789abcdef0加载到寄存器%rdx中。

需要注意的是,irmovq指令是x86汇编语言中的一条特定指令,具体的用法和语法可能会因为不同的处理器架构或者汇编语言规范而有所不
同。

mrmovq 指令

mrmovq指令是x86汇编语言中的一条指令,用于将内存中的数据加载到寄存器中。这个指令主要用于从内存中读取数据,然后将其加载到寄存器中。

mrmovq指令的具体格式如下:

mrmovq 地址, 寄存器

其中地址表示要读取数据的内存地址,寄存器表示要将读取的数据加载到的目标寄存器。

举个例子,如果我们要将内存地址0xf7bdc0c3处的数据加载到寄存器%rax中,我们可以使用mrmovq指令:

mrmovq 0xf7bdc0c3, %rax

这条指令的作用是将内存地址0xf7bdc0c3处的数据加载到寄存器%rax中。

需要注意的是,mrmovq指令是x86汇编语言中的一条特定指令,具体的用法和语法可能会因为不同的处理器架构或者汇编语言规范而有所不同。

环境问题

gcc 找不到 lfl

yum install flex
yum install flex-devel  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/162531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 中如何导入数据?

文章目录 前言使用 LOAD DATA 导入数据使用 mysqlimport 导入数据mysqlimport的常用选项介绍后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Mysql 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正…

计算机毕业设计项目选题推荐(免费领源码)Java+ssm+MYSQL酒店大数据资源管理系统的设计与实现02029

摘要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对酒店大数据资源管理系统等问题,对…

发挥云计算潜力:Amazon Lightsail 与 Amazon EC2 的综述

文章作者:Libai 欢迎来到云计算世界,这里有无数的机会和无限的应用程序增长。 在当今的数字时代,企业可能会发现管理基础架构和扩展应用程序具有挑战性。 传统的本地解决方案需要大量的硬件、软件和维护前期投资。 要满足不断增长的需求&…

3D Slicer使用与体绘制

3D Slicer默认不进行体绘制,右上角的三维重建窗口只显示一个空的立方体框。要进行体绘制,先切换到体绘制设置窗口: 在体绘制设置窗口中,选择进行体绘制的DICOM序列,然后将体绘制开关打开(眼睛标志&#xff…

如何快速查找日志?

快速查找日志 在报障处理中&#xff0c;经常会有查日志的情况&#xff0c;快速查找日志&#xff0c;就能快速发现问题。 以下提供我常用的二种查找方式&#xff1a;关键词查找和时间查找。 1.关键词 cat <fileName> | grep 关键词2.按时间顺序切割日志文件 sed -n /2023…

Omniverse合成数据生成【城市交通场景】

智慧城市是城市生活的未来。 然而&#xff0c;它们可能给城市规划者带来各种挑战&#xff0c;尤其是在交通领域。 为了取得成功&#xff0c;城市的各个方面—从环境和基础设施到商业和教育—必须在功能上整合。 这可能很困难&#xff0c;因为单独管理交通流量是一个复杂的问题…

程序员护城河:保障系统安全与网络稳定的不可或缺力量

引言&#xff1a; 在当今数字化时代&#xff0c;计算机和互联网的广泛应用使得程序员的角色变得越来越重要。作为保障系统安全与网络稳定的关键力量&#xff0c;程序员需要具备一系列的基本能力&#xff0c;同时还需掌握一些专业技术和策略&#xff0c;以确保系统运行的安全性…

Navicat 技术指引 | 适用于 GaussDB 的查询编辑器

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

leecode | HTML 解析器

提供一串字符串&#xff0c;根据给定的规则&#xff0c;去解析该字符串&#xff0c;并返回结果 简而言之&#xff0c;就是根据指定的格式&#xff0c;替换内容 HTML 里这些特殊字符和它们对应的字符实体包括&#xff1a; 双引号&#xff1a;字符实体为 " &#xff0c;对应…

立言

根据我的理解&#xff0c;不了解佛法 和 了解佛法 得看 因缘。相比较了解佛法&#xff0c;理解佛法则显得更难&#xff1b;相比较理解佛法&#xff0c;见解佛法则显得更难&#xff1b;相比较见解佛法&#xff0c;证解佛法则显得更难&#xff1b;相比较证解佛法&#xff0c;真正…

vue 文件md5

一、在项目根目录下安装 npm install --save js-md5 二、在vue文件中引入 import md5 from ‘js-md5’; 三、在vue文件中使用 md5(1); // d41d8cd98f00b204e9800998ecf84273// 加密中文 md5(中文);// 其他 md5([]);// Different output md5(1); // d41d8cd98f00b204e98009…

智能导视电子指路牌是什么?

SVIP-3800系列智能电子指路牌也称智慧指路灯杆&#xff0c;智能指路牌&#xff0c;导航立柱&#xff0c;多功能指示牌&#xff0c;多功能路标&#xff0c;智能指路机器人&#xff0c;智能导视指路牌&#xff0c;问路导航机器人&#xff0c;智能路牌&#xff0c;叁仟智慧路牌、智…

统计学显著性检验

方差齐性&#xff1a; 方差齐性指在两个或多个总体中&#xff0c;它们的方差是相等的。 方差齐性是t检验、方差分析的前提条件之一。 方差分析&#xff08;ANOVA&#xff09;&#xff1a; 通过比较组间变异与组内变异的大小关系&#xff0c;来判断样本均值是否有显著性差异&a…

数据结构-leetcode(设计循环队列)

1.学习内容&#xff1a; 今天 我们讲解一道能够很好的总结所学队列知识的题目---设计循环队列 622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 2.题目描述&#xff1a; 让我们设计一个队列 要求是循环的 这和我们的双向链表有些类似 让我们按要求设计出这些相对…

多线程解决大数据批量导出问题(demo)

1.首先从网上找一个到工具类&#xff0c;我这里是ExcelUtils&#xff0c;如下 package com.org.util;import org.apache.poi.xssf.streaming.SXSSFCell; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFSheet;import java.beans.I…

Navicat 技术指引 | GaussDB 数据查看器

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

读论文模板

文章简介 文章标题&#xff1a;文章链接作者单位&#xff1a;文章来源&#xff1a;会议视频ppt1.他人代码 2.作者代码 文章思路 文章总结 1.解决问题 2.使用方法 3.文章不足

解释器模式 (Interpreter Pattern)

定义 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;用于定义一种语言的语法表示&#xff0c;并提供一个解释器来处理这种语法。这种模式用于实现语言解释器&#xff0c;通常用于专业领域或复杂文本处理中。在解释器模式中&#xff…

220V转12V固定输出12V非隔离芯片WT5106WT5105

220V转12V固定输出12V非隔离芯片WT5106WT5105 今天给大家介绍一款实用芯片&#xff0c;WT5106。它是一款高效率高精度的非隔离降压开关电源恒压控制驱动芯片。 WT5106适用于85VAC~265VAC全范围输入电压的非隔离Buck、Buckboost拓扑结构&#xff0c;小家电、电机驱动、继电器驱…

量子计算争霸战加码?美国将拨款30亿美元发展量子计算

&#xff08;图片来源&#xff1a;网络&#xff09; 美国众议院科学、太空和技术委员会认为&#xff0c;如果不采取措施加速量子计算系统的发展&#xff0c;美国将落后于俄罗斯和中国。 因此&#xff0c;该小组的领导人——主席Frank Lucas&#xff08;共和党&#xff09;和高…