汇编1.基础

本文介绍了dosbox的使用方法,包括解压运行、挂载主机文件夹、启动debug等操作。还详细讲解了16位汇编指令,涵盖指令帮助文档、使用规则,以及数据传输、算术运算、位操作等指令,并布置了使用汇编语言翻译算式的课后作业。

dosbox的使用

  1. 解压出来, 运行: dosbox.exe

  2. 将主机的文件夹挂载到模拟器中, 为了能够让模拟器操作主机中的文件.

    1. mount C: d:\dosbox mount C: . (一个点是挂载exe所在当前目录)

    2. C: - 表示的是模拟器中的路径.

    3. d:\dosbox - 主机中的路径

    4. 将主机中的文件夹挂载到模拟器C盘

  3. 输入盘符,切换到挂载好的盘中.

  4. 启动debug

    1. 命令:

      1. 寄存器 : r - 查看/修改寄存器

        1. 修改寄存器 r ax

      2. 内存相关: d - 查看内存 , e-修改内存

        1. 查看内存: d 1000:200

        2. 修改内存: e 1000:200

      3. 运行相关: t - 单步步入 , p - 单步步过

      4. 反汇编相关:

        1. a - 进行汇编, a 1000:200 输入汇编代码

        2. u - 查看汇编 u 1000:200

      5. 退出调试器: q

    2. 使用TD.exe

 

16位汇编指令

指令帮助文档

  • imm - 立即数,操作数可以是数字. 后面带有数字,例如imm8,imm16,数字表示立即数的字节数.

  • reg - 表示通用寄存器种的任意一个, 后面带有数字,例如reg8,reg16; , 表示只能使用特定大小的寄存器, 例如, 如果是reg8就只能使用al,ah,bl,bh,cl,ch,dl,dh中的一个.如果是reg16,就不能使用al这种的8位寄存器.

  • seg/sreg - 表示段寄存器.只能是cs,ds,es,ss

  • mem - 表示内存, 后面带有数字,例如mem8,mem16,表示读写内存的字节数. 表示内存操作数大小时, 需要使用byte ptr,word ptr,dword ptr, 例如: byte ptr ds:[1000],表示能从ds:[1000]读写1个字节.

dword ptr ds:[1000],表示能从ds:[1000]读写4个字节.

汇编指令的使用规则

  1. 操作数只能是: 数字, 寄存器, 内存3种

  2. 两个操作数的大小必须一样.

    1. mov [1000h] , 100; 错误指令,无法确定内存操作数的大小,也无法确定立即数的大小. 改成mov word ptr [1000h],100

    2. mov ax , 10, 正确的, 如果已经确定了其中一个操作数的大小的时候, 另一个操作数的大小不用给出, :mov [1000h],ax ,此处虽然没有给出内存操作数的大小, 但是ax的大小是固定不变的, 因此, 内存操作数的大小就可以使用ax的大小来确定,就是word ptr.

  3. 两个操作数不能同时都是内存.

    1. mov [1000h],[1004h] 改成: mov ax,[1004h]; mov [1000h],ax

  4. 目标操作数不能是数字

    1. mov 1 , ax 错误

数据传输指令

  • mov - 将源操作数赋值到目标操作数

  • xchg - 交换两个操作数.

  • 栈操作有关的指令:

    • push - 将一个数值压入内存中(内存的地址由sp寄存器来提供)

    • pop - 将一个数值从内存提取出来,保存到目标操作数中内存地址由sp寄存器提供)

    • pushf/popf - 将标志寄存器的内容压入/弹出栈

    • pusha/popa - 将所有寄存器状态压入/弹出堆栈

      • 压入的顺序: ax,cx,dx,bx,sp,bp,si,di

      • 出栈的顺序, 和压入的顺序相反.

算术运算指令

    • inc -自增1

    • add - 加法 , 将源操作数累加到目标操作数上. 相当于+=

    • dec - 自减1

    • sub - 减法, 将源操作数累减到目标操作数上, 相当于-=

    • 无符号乘法

      • mul 只有一个操作数, 使用al/ax作为默认操作数, 相乘得到的结果保存到ax/dx:ax中.

    • 有符号乘法

      • imul 单操作数, 使用al/ax作为默认操作数, 相乘得到的结果保存到ax/dx:ax中.

      • imul 双操作数, 源操作数乘以目标操作数, 结果存放到目标操作数中.

      • imul 三操作数, 后两个操作数相乘,结果存放到第一个操作数.

  • 除/取余

    • 无符号除法

      • div - 单操作数, 操作数是除数, 被除数是al/dx:ax, 8位运算时,商保存在al,余数保存在ah,16位运算, 商保存在ax,余数保存在dx

    • 有符号:

      • idiv 单操作数, 使用和div一样.

位操作指令

  • 移位运算:

    • shl - 左移运算

    • shr - 右移运算

    • and 按位与

    • or 按位或

    • not 按位取反

 

 

课后作业

使用汇编语言将下列算式给翻译出来,只允许使用ax,bx,cx和sp寄存器,可以使用栈

int a=10;
int b=20;
int c=4;
a = (a << c) * (a>>c) / ((c ^ a) | (c ^b )) - (++c + --a)
部分示例:
mov ax,10;
mov bx,20;
mov cx,4;

 

 

转载于:https://www.cnblogs.com/ltyandy/p/11039837.html

1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值