C語言轉成MIPS組合語言

2021-08-28 12:20:38 字數 2366 閱讀 9878

**功能

隨機輸入兩個整數,然後計算這兩個數的最小公倍數和最大公約數,並作為計算結果輸出。

#include "stdio.h"

#include "conio.h"

int main()

a=num1;

b=num2;

while(b!=0)//一直重複賦值和計算,直到找到正確結果

printf(「gongyueshu:%d\n」,a);//輸出結果

printf(「gongbeishu:%d\n」,num1*num2/a);

}.data  

#輸出字串,需要提前定義,

msg_prf1: .ascii "please input twe numbers\0"

msg_prf2: .ascii "gongyueshu\0"

msg_prf3: .ascii "gongbeishu\0"

.text

.globl   main

main:

#printf(「please input two numbers:\n」) $v0等於4輸出字串

la $a0, msg_prf1

li $v0, 4  

syscall

#scanf("%d",num1); $v0等於5輸入整數,給暫存器$t0

li $v0, 5

syscall

move $t0, $v0

#scanf("%d",num2); $v0等於5輸入整數,給暫存器$t1

li $v0, 5

syscall

move $t1,$v0

#int temp=0;定義變數temp給$t2,並賦初始值等於0

li  $t2, 0

#if成功temp=num1;num1=num2;num2=temp;如果$t0

#者位置

bgt  $t1,$t0, sub1

sub1:#交換$t0,$t1  ,$t2當作乙個中間變數

move $t2, $t0

move $t0, $t1

move $t1, $t2

#int a=0;把$t3的值賦0

li  $t3, 0

#int b=0;把$t4的值賦0

li  $t4, 0

#a=num1; b=num2;

move $t3, $t0       #把$t0的值賦給$t3,

move $t4, $t1 #把$t1的值賦給$t4,

#while迴圈部分,一直計算,其中的值一直在變化

loop:

rem $t2, $t3, $t4 #計算 $t3,$t4的模運算,結果存$t2

move $t3, $t4 #把$t4的值賦給$t3

move $t4, $t2 #把$t2的值賦給$t4

bgt $t4, 0, loop #while裡面的條件$t4>0

#printf(printf(「gongyueshu:%d\n」,a);

la $a0, msg_prf2    #把$a0的值賦變成要輸出的字串

li $v0, 4 #$v0值為4輸出字串

syscall

#輸出公約數a

move $a0, $t3 #把$t3值賦給$a0,$a0的值用來輸出

li $v0,1 #$v0值為1輸出整數

syscall

#printf(「gongbeishu:%d\n」,num1*num2/a」)

la $a0, msg_prf3  #把$a0的值賦變成要輸出的字串

li $v0, 4 #$v0值為4輸出字串

syscall

#計算最小公倍數

mul $t0, $t0, $t1 #計算最小公倍數$t0,$t1的乘,放在$t0

div $t0, $t0, $t3 #$t0,$t3相除,結果 放$t0

#輸出最小公倍數

move $a0, $t0 #輸出$t0

li $v0,1 #$v0值為1輸出整數

syscall

1、輸出字串時$v0=4

輸出結果:

2、輸入資料時$v0=5

輸入結果,輸入6和9

3、$t0的值變為輸入的值6

4、執行過程是暫存器的變化如下:

5、執行結果為3和18

mips組合語言筆記

因為乙個課程涉及mips組合語言,自己做一些筆記。部落格還有乙個b站的,查mips能查到那個文章。注意 彙編使用的位址也是邏輯位址,有偏移量,通過硬體進行轉化。比如乙個 la操作就會進行對記憶體的好幾次訪問 具體暫存器操作貼乙個圖 1 往a0裡寫資料。3種方式。1 寫立即數 li a0 1 2 暫存...

MIPS組合語言實現選擇排序

mips組合語言實現排序演算法,其實並不難。只要你掌握了基本的指令語句,並且熟悉c或c 相關演算法,即可輕鬆寫出來。對於mips組合語言還不太熟悉的夥伴,可以參考下面這篇部落格 它的具體實現 如下 c include using namespace std int main num index nu...

組合語言 AT T組合語言

這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...