当前位置: 首页 > news >正文

由题构造 嵌入汇编(汇编)

小明是一个渔夫,坚持“三天打鱼,两天晒网”。已知今年有365天,1月1日小明去打3天鱼,1月4号开 始晒2天网。

编写程序让用户输入今年的第几天,输出当天小明是打鱼还是晒网,打鱼输出“F”,筛网输出“D”, 如果输入的天数不正确则输出“E”。例如输入5,程序输出“D”;输入6,程序输出“F”;输入366输出“E”。

设有如下C程序框架,请采用嵌入汇编形式编写所需的程序片段,其中判断打鱼还是筛网的部分需采用子程 序形式实现。请在必要的位置进行注释。

#include <stdio.h>int main() 
{ unsigned int n = 0; char result[2] = " ";  // 用于保存输出结果,预留足够空间printf("请输入第几天(1~365):\n"); scanf("%d", &n); // 嵌入汇编主逻辑_asm {mov eax, n              ; 将输入的天数存入eaxcmp eax, 1              ; 检查是否小于1jl invalid_day          ; 如果小于1,跳转至无效处理cmp eax, 365            ; 检查是否大于365jg invalid_day          ; 如果大于365,跳转至无效处理; 有效天数,调用判断子程序call judge_fish_or_dryjmp output_result       ; 跳转到结果invalid_day:; 无效天数,设置结果为'E'mov byte ptr [result], 'E'jmp exit_asm            ; 退出汇编块output_result:; 将子程序返回的结果存入resultmov byte ptr [result], alexit_asm:; 汇编块结束} printf("结果:%s\n", result); return 0; 
}// 判断打鱼还是晒网的子程序,使用嵌入汇编实现
_asm {
judge_fish_or_dry:; 功能:判断给定天数是打鱼还是还是晒网; 输入:eax = 天数(n); 输出:al = 'F'(打鱼)或'D'(晒网); 计算(n-1) % 5,因为周期是5天(3天打鱼+2天晒网)dec eax             ; eax = n-1,将天数转为0基索引; 计算模5运算mov ecx, 5xor edx, edx        ; 清空edx,准备除法div ecx             ; edx = (n-1) % 5,eax = 商(无用); 判断余数范围cmp edx, 2          ; 余数0,1,2对应打鱼(3天)jle is_fishing      ; 如果小于等于2,跳转至打鱼处理jmp is_drying       ; 否则为晒网(余数3,4对应2天)is_fishing:mov al, 'F'         ; 设置结果为打鱼jmp return_funcis_drying:mov al, 'D'         ; 设置结果为晒网return_func:ret                 ; 返回主程序
}


http://www.dtcms.com/a/360225.html

相关文章:

  • NAS Docker 安装N8N
  • 计算机视觉与深度学习 | 双目立体特征提取与匹配算法综述——理论基础、OpenCV实践与MATLAB实现指南
  • 猛犸Lark max 无线麦克风录音爆音问题的解决
  • 【STC库函数】使用芯片自带的EEPROM来保存掉电不丢失的数据
  • 开发常用工具专栏
  • 赵玉平《梁山政治》读书笔记(下部)
  • wifi控制舵机
  • WinExec
  • Nginx反向代理及配置
  • c++ 线程局部存储(Thread-Local Storage,TLS)
  • Langflow Memory 技术深度分析
  • java--浅拷贝深拷贝
  • Introduction to GIS —— Chapter 3(Vector Data Model)
  • 雪花算法生成分布式ID
  • AI 智能体汇总,自动执行任务的“真 Agent”
  • 动态规划入门(三):一些经典动态规划模型
  • 赵玉平《刘备谋略》读书笔记(下部)
  • 小迪自用web笔记22
  • 01背包day35
  • 设计模式 | 常见的设计模式(单例、工厂、代理、适配器、责任链等等)
  • VisionProC#联合编程火花塞距离检测与VisionPro操作
  • libmodbus库,c++配置方法
  • 【CUDA入门·Lesson 1】Ubuntu实战:CUDA 概念、nvidia-smi 工具与 GPU 参数详解
  • 在Unity中,让子物体不随父物体移动或转动的方法!
  • 下一代防火墙(NGFW):从定义到功能
  • 试试 Xget 加速 GitHub 克隆仓库
  • 【WEB】[BUUCTF] <GXYCTF2019禁止套娃>《php函数的运用》
  • 大模型RAG项目实战:向量数据库Faiss
  • 【初始web3】什么是web3
  • 大模型时代:用Redis构建百亿级向量数据库方