1.实现两个64位数相减 2.求两个数最大公约数 3.实现for循环1~100之间

该文展示了三个汇编语言程序,分别实现64位数的相减,求两个数的最大公约数,以及用for循环计算1到100的序列。通过r寄存器的运算,完成了基本的算术逻辑操作。

作业一:实现两个64位数相减

代码如下:

.text
.globl _start

_start:
    @实现两个64位数相减
    @第一个64位数:高32位用r0=0x6表示,低32位用r1 = 0x4表示
    @第二个64位数:高32位用r2=0x2表示,低32位用r3 = 0x5表示
    @实现两个64位数相加:高32位用r5表示,低32位相加r4表示
    
    @ r4 = r1 - r3 = 0x4 - 0x5 = 0xffffffff
    @ r5 = r0 - r2 = 0x6 - 0x2 - 1 = 0x3
    
    mov r0, #0x6
    mov r1, #0x4
    mov r2, #0x2
    mov r3, #0x5
    
    subs r4,r1,r3
    sbc r5,r0,r2

    
stop:
    b stop
.end

结果如图:

作业二:求两个数最大公约数

代码如下:

.text
.globl _start

_start:
    
    mov r0, #9
    mov r1, #15
    
start:
    cmp r0,r1
    beq stop
    
    subhi r0,r0,r1
    subcc r1,r1,r0
    b start    

stop:
    b stop
.end

结果如图

作业三:实现for循环1~100之间 代码如下:

.text
.globl _start

_start:

    mov r0, #0
    mov r1, #1
    mov r2, #100
    mov r3, #1
    
    start:
    cmp r1,r2
    bhi stop
    
    add r0,r1
    add r1,r3
    b start

    
stop:
    b stop
.end
    

结果如图:

### 日期类的设计与实现 为了实现一个支持两个日期相减以及日期加上一个整数的日期类,需要设计一个 `Date` 类,包含年、月、日等私有数据成员,并通过重载运算符实现所需功能。以下是具体的实现方法。 #### 类定义 ```cpp class Date { private: int year; int month; int day; // 判断闰年 bool leap(int y); // 将日期转换为从0年0月0日起的天数 long dton(Date &date); // 将天数转换为对应的日期 Date ntod(long days); public: // 构造函数 Date(int y, int m, int d); // 日期加天数 Date operator+(int days); // 日期减天数 Date operator-(int days); // 两个日期相减 int operator-(Date &other); }; ``` #### 私有成员函数实现 1. **判断闰年** ```cpp bool Date::leap(int y) { return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0); } ``` 2. **将日期转换为从0年0月0日起的天数** ```cpp long Date::dton(Date &date) { int y = date.year; int m = date.month; int d = date.day; long days = 0; // 计算年份的总天数 for (int i = 0; i < y; ++i) { days += leap(i) ? 366 : 365; } // 计算月份的总天数 int monthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (leap(y)) { monthDays[1] = 29; } for (int i = 0; i < m - 1; ++i) { days += monthDays[i]; } // 加上天数 days += d - 1; return days; } ``` 3. **将天数转换为对应的日期** ```cpp Date Date::ntod(long days) { int y = 0; while (days >= 365) { if (leap(y)) { if (days >= 366) { days -= 366; y++; } else { break; } } else { days -= 365; y++; } } int monthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (leap(y)) { monthDays[1] = 29; } int m = 1; while (days >= monthDays[m - 1]) { days -= monthDays[m - 1]; m++; } int d = days + 1; return Date(y, m, d); } ``` #### 重载运算符实现 1. **日期加天数** ```cpp Date Date::operator+(int days) { long totalDays = dton(*this) + days; return ntod(totalDays); } ``` 2. **日期减天数** ```cpp Date Date::operator-(int days) { long totalDays = dton(*this) - days; return ntod(totalDays); } ``` 3. **两个日期相减** ```cpp int Date::operator-(Date &other) { return static_cast<int>(dton(*this) - dton(other)); } ``` #### 构造函数实现 ```cpp Date::Date(int y, int m, int d) : year(y), month(m), day(d) {} ``` ### 示例用法 ```cpp int main() { Date d1(2023, 10, 1); Date d2 = d1 + 5; // 2023-10-6 Date d3(2023, 10, 10); int diff = d3 - d1; // 9天 std::cout << "d2: " << d2.year << "-" << d2.month << "-" << d2.day << std::endl; std::cout << "diff: " << diff << " days" << std::endl; return 0; } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值