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.pswp.cn/news/162531.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162531.shtml
英文地址,請注明出處:http://en.pswp.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;和高…