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,一经查实,立即删除!

相关文章

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

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

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

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

3D Slicer使用与体绘制

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

基于 Modbus 的工业数据采集、控制(part 3)

Modbus 设备(利用 slave 模拟) Modbus 采集程序 client.c #include "client.h"modbus_t *ctx; key_t key_shm, key_msg; int shmid, msgid; struct shm *shm0; struct msgbuf msg0;void *collector(void *arg) {struct shm *p = (struct shm *)arg;while (1){sle…

改进YOLOv5 | C3模块改动篇 | 轻量化设计 |骨干引入动态卷积|CondConv

🗝️YOLOv5实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv5:我的专业笔记与技术总结   -- YOLOv5轻松上手, 适用技术小白,文章代码齐全,仅需 …

信号功率放大器的工作原理和特点是什么

信号功率放大器是一种电子设备,用于将输入信号的功率进行放大,以达到所需的输出功率水平。它在各个领域中都有广泛的应用,包括音频放大器、射频放大器、激光功率放大器等。下面将详细介绍信号功率放大器的工作原理和特点。 工作原理&#xff…

Git使用基础总结(从小白到新手版)

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…

OpenAI“宫斗”新进展!Sam Altman将重返OpenAI担任首席执行官 董事会成员改动

在经过激烈的五天讨论和辩论之后,高调人工智能初创公司OpenAI宣布,其联合创始人之一Sam Altman将回归担任首席执行官。这一决定是对上周Altman突然被解雇的回应,该决定引起了极大的关注和讨论。 OpenAI表示,他们已经达成了与Altm…

德迅云安全-德迅卫士:保障您的主机安全

主机安全是指保证主机在数据存储和处理的保密性、完整性、可用性,包括硬件、固件、系统软件的自身安全,以及一系列附加的安全技术和安全管理措施。 为什么要主机安全? 服务器一旦被黑客入侵,个人和企业面临以下安全风险&#xff…

张弛声音变现课,如何为偶像剧配音?

在为偶像剧进行配音工作时,配音员应当捕捉剧中角色的年轻活力、浪漫的爱情故事以及轻快的生活节奏。偶像剧主要讲述的是青春的爱恋、友谊和梦想追求,因此配音需要传递出剧中的真诚和活泼。为偶像剧配音可以考虑以下几点建议: 鲜明活泼的声音 …

如何判断交流回馈老化测试负载是否合格?

交流回馈老化测试负载是用于模拟实际工作环境中设备运行状态的测试工具,主要用于检测设备的耐久性和稳定性。 负载性能:需要检查负载的性能是否符合设计要求,这包括负载的功率、电流、电压等参数是否在规定的范围内,以及负载的工作…

【AI】行业消息精选和分析(11月23日)

今日动态 1、Sam Altman 重掌 CEO,OpenAI 权力斗争正式「落幕」 2、重磅好消息:语音 ChatGPT 现已向全用户开放 3、NVIDIA 与基因泰克合作,利用生成式 AI 加速药物发现 4、 英伟达Q3营收同比增长206%至181亿美元 黄仁勋:生成式AI时…

Zoho Bigin和标准版CRM有什么区别?

Zoho Bigin是Zoho公司推出的一款针对小微企业设计的CRM系统,它与Zoho CRM一脉相承,但更加轻量级,快速帮助小微企业实现数字化销售。下面来说说,Zoho Bigin是什么?它适合哪些企业? 什么是Zoho Bigin&#x…