【汇编语言05】第4章 第一个程序

2023-11-07

0 前言

  1. 知识回顾:前面几章我们学习了CPU中的寄存器及其工作原理、代码段数据段和栈段的含义及其原理、常见的一些汇编指令,此外也用debug程序进行了简单的实验。
  2. 现在我们将开始编写完整的汇编语言程序,用编译器将它们编译成为可执行文件(如:*.exe文件),在操作系统中运行。

1 源程序从编写到执行

1.1 第1步:编写汇编源程序

  1. 使用文本编辑器(如记事本、Nodepad++、UltraEdit等),用汇编语言编写汇编源程序。
  2. 结果:产生了一个存储源程序的文本文件。

1.2 第2步:对源程序进行编译连接

  1. 过程:
    1. 使用汇编语言编译程序(MASM.EXE)对源程序文件中的源程序进行编译,产生目标文件;
    2. 再用连接程序(LINK.EXE)对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。
  2. 可执行文件中包含两部分内容:
    1. 程序(从原程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据)
    2. 相关的描述信息(比如:程序有多大、要占多少内存空间等)

1.3 第3步:执行可执行文件中的程序

操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如:设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。

2 简单源程序示例及其组成

2.1 简单源程序示例

assume cs:codesg		#在该程序中,codesg segment……codesg ends定义了一个名为codesg的段,在这个段中存放代码,是个代码段。
codesg segment
start:	mov ax,0123H
		mov bx,0456H
		add ax,bx
		add ax,bx
		mov ax,4c00H
		int 21H
codesg ends
end

2.2 伪指令

  1. 汇编指令与伪指令:
    (1)汇编指令:有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。
    (2)伪指令:没有对应的机器码的指令,最终不被CPU所执行。
    (3)谁来执行伪指令呢?伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。
  2. segment和ends
    (1)segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。
    (2)segment和ends的功能是定义一个段,segment说明一个段开始,ends 说明一个段结束。
    (3)一个段必须有一个名称来标识,使用格式为:
    段名 segment
    段名 ends
  3. end
    (1)end 是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令 end,就结束对源程序的编译。
    如果程序写完了,要在结尾处加上伪指令end 。否则,编译器在编译程序时,无法知道程序在何处结束。
    (2)切记:不要搞混了end和ends。
  4. assume
    (1)含义:“假设”。它假设某一段寄存器和程序中的某一个用 segment … ends 定义的段相关联。
    (2)作用:通过assume说明这种关联,在需要的情况下 ,编译程序可以将段寄存器和某一个具体的段相联系。

2.3 源程序与程序

我们可以将源程序文件中的所有内容称为源程序,将源程序中最终由计算机执行处理的指令或数据 ,称为程序。

2.4 标号

  1. 一个标号指代了一个地址。
  2. 例如codesg:放在segment的前面,作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。

2.5 程序返回

  1. 定义:一个程序结束后,将CPU的控制权交还给使它得以运行的程序。
  2. 程序返回的理解:DOS是一个单任务操作系统。
    (1)一个程序P2在可执行文件中,则必须有一个正在运行的程序P1,将P2从可执行文件中加载入内存后,将CPU的控制权交给P2,P2才能得以运行。P2开始运行后,P1暂停运行。
    (2)而当P2运行完毕后,应该将CPU的控制权交还给使它得以运行的程序P1,此后,P1继续运行。
  3. 程序返回的实现:应该在程序的末尾添加返回的程序段。
mov ax,4c00H
int 21H
  1. 与程序结束相关的指令
目的 相关指令 指令性质 指令执行者
通知编译器一个段结束 段名 ends 伪指令 编译时,由编译器执行
通知编译器程序结束 end 伪指令 编译时,由编译器执行
程序返回 mov ax,4c00H int 21H 汇编指令 执行时,由CPU执行

2.6 错误类型

  1. 主要包含语法错误和逻辑错误两种。
  2. 语法错误:在编译时,出现编译器无法理解的关键字或语句,容易发现。
  3. 逻辑错误:在运行时发生的错误,难以发现。

3 上机实验

3.1 编辑源程序

  1. 虚拟机中安装DOSBox,参考《汇编语言03】第2章 寄存器
  2. 在本机打开txt文件编辑以下代码,并重命名为“1.asm”。
assume cs:codesg
codesg segment
start:	mov ax,0123H
		mov bx,0456H
		add ax,bx
		add ax,bx
		mov ax,4c00H
		int 21H
codesg ends
end
  1. 在DOSBox文件夹中新建一个文件夹,命名为“1”,将该文件复制黏贴到该文件夹下,如下图。
    在这里插入图片描述

  2. 启动DOSBox程序,并输入命令mount c d:\DOSBox挂载所需程序,其中d:\DOSBox是文件夹存放的路径,c是挂载到虚拟盘符为c,如下图所示表示挂载成功,输入命令c:切换至虚拟符c。
    在这里插入图片描述

  3. 输入命令dir可以看到当前路径下的文件,可以看到挂载下的各个文件夹。
    在这里插入图片描述

3.2 编译

3.2.1 概述

在编译过程中,我们提供了一个输入,即源程序文件。最多可以得到3个输出:目标文件(.obj)、列表文件(.lst)和交叉引用文件(.crf)。这3个输出文件中,目标文件是我们最终要得到的结果,另外两个只是中间结果,可以让编译器不生成,在本课程中不讨论这两类文件的作用。

3.2.2 编译操作

  1. 先启动masm程序,如果在该程序当前所在目录,则输入命令masm启动程序,如果不在该程序所在目录,则需要输入路径。
    在这里插入图片描述
  2. 运行masm后,首先显示的实一些版本信息,然后提示输入将要被编译的源程序文件的名称,如上图。
    (1)[,ASM]提示我们,默认的文件扩展名是asm,如果要输入其他后缀的文件,则需要完整输入文件名和后缀,如“1.txt”。
    (2)要知名文件所在的路径,如果是在当前路径下,只需要输入文件名即可,如果在其他目录,则需要输入路径。
    (3)在本程序中,要编译的文件不在masm当前目录,使用命令c:\1\1指定要编译的文件路径,后缀名asm可以省略。
    在这里插入图片描述
  3. 在上面步骤后,程序继续提示我们输入要编译出的目标文件名,目标文件是我们对一个源程序进行编译要得到的最终结果。
    (1)屏幕提示[1.OBJ],是因为我们输入的源程序文件名为1.asm,则编译程序默认要输出的文件名为1.obj,直接按enter生成该文件。
    (2)如果要在指定目录下生成指定文件,则可以输入“路径+文件名”的格式。
    在这里插入图片描述
  4. 在上图中,编译程序提示输入列表文件的名称,这个文件是编译器将源程序编译为目标文件的过程中产生的中间结果,可以让编译器不生成该文件,直接按enter即可。
    在这里插入图片描述
  5. 编程程序提示输入交叉引用文件的名称,这个文件同列表文件一样,是中间结果,直接按enter不生成。
    在这里插入图片描述
  6. 可以看到编译过程没有出错。在当前文件夹下找到生成的1.obj文件。如果要让该文件在源程序所在文件夹中生成,则在生成该文件的步骤需要输入“路径+文件名”来指定。
    在这里插入图片描述

3.2.3 简易的编译操作

像上面操作过程,如果我们无需生成各个中间文件,则可以使用简易的编译操作,直接输入命令 masm 路径+文件名;,在后面以分好结束,按enter,编译器就会对源程序文件进行编译,在当前路径下生成目标文件,并在编译过程中自动忽略中间文件的生成。

3.3 连接

3.3.1 概述

  1. 连接:从目标文件(.obj)→可执行文件(.exe)的过程。
  2. 连接的作用有以下几个:
    (1)当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;
    (2)程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
    (3)一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这此内容处理为最终的可执行信息。

3.3.2 连接操作

  1. 启动link程序。LINK.EXE在当前目录下,直接输入命令link.exe启动该程序。
    在这里插入图片描述
  2. 提示输入要被连接的目标文件名。因为编译生成的文件就在当前目录下,因此此处输入1即可指定该文件。如果是在其他文件夹,则需要补充路径信息,如果是其他后缀,则需要补充后缀信息,如“1.bin”。
    在这里插入图片描述
  3. 程序提示输入要生成的可执行文件名,默认与obj文件同名,直接输入enter使用默认文件名。如果要指定在其他文件夹下生成,则需要补充路径信息。
    在这里插入图片描述
  4. 提示输入映像文件名,这个中间结果,可以不生成,直接按enter。
    在这里插入图片描述
  5. 程序提示指定库文件名,库文件里面包含了一些可以调用的子程序,如果程序中调用了某一个库文件中的子程序,就需要在连接的时候,将这个库文件和目标文件连接到一起,生成可执行文件。在这个示例文件中,没有调用任何子程序,忽略库文件名的输入,直接按enter。
    在这里插入图片描述
  6. 可以看到成功生成可执行文件。
    在这里插入图片描述

3.3.3 简易的连接操作

像上面操作过程,如果我们无需生成各个中间文件,则可以使用简易的连接操作,直接输入命令 link 路径+文件名;,在后面以分好结束,按enter,连接程序就会对目标文件进行处理,在当前路径下生成可执行文件,并在过程中自动忽略中间文件的生成。

3.4 程序的执行与跟踪

3.4.1 操作系统的外壳

  1. 操作系统是由多个功能模块组成的庞大 、复杂的软件系统。任何通用的操作系统 ,都要提供一个称为shell(外壳)的程序 ,用户(操作人员)使用这个程序来操作计算机系统工作。
  2. DOS中有一个程序command.com ,这个程序在 DOS 中称为命令解释器,也就是DOS系统的shell。
  3. DOS启动时,先完成其他重要的初始化工作,然后运行command.com,运行后,执行完其他的相关任务后,在屏幕上显示出由当前盘符和当前路径组成的提示符,比如:“c:\”等,然后等待用户输入。
  4. 用户可以输入所需要执行的命令,如cd、dir、type等,这些命令由command执行,command执行完这些命令后,再次显示由当前盘符和当前路径组成的提示符,等待用户输入。
  5. 如果用户要执行一个程序,则输入该程序的可执行文件的名称,command首先根据文件名找到可执行文件,然后将这个可执行文件的程序载入内存,设置SS:SP指向程序的入口。此后,command暂停运行,CPU运行程序。程序运行结束后,返回到command中,command再次显示由当前盘符和当前路径组成的提示符,等待用户输入。

3.4.2 执行

双击所生成的可执行程序,在win7 64位系统上运行出现问题,设置了兼容性依然不行,将可执行程序复制到winXP中,可执行,打开后瞬间消失。

3.4.3 跟踪

  1. 为观察程序的运行过程,可以使用debug程序。debug可以将程序加载入内存,设置CS:IP指向程序的入口,但debug并不放弃对CPU的控制,这样,我们就可以使用debug的相关命令来单步执行程序,查看每一条指令的执行结果。
  2. 在本实验中,目前debug程序和可执行程序均位于当前目录下,可以使用命令dubug 1.exe,如果不是在当前目录下,则需要补充路径信息。
    在这里插入图片描述
  3. 使用R命令来查看各个寄存器的设置情况。debug将程序从可执行文件加载入内存后,cx中存放的实程序的长度,“000F”表示该程序共有15个字节,结合前面章节内容,理解各个寄存器的含义。
    在这里插入图片描述
  4. 从上图可以看出,CP:IP指向第一个指令,地址为076A:0000,指令为mov ax,0123,使用debug命令U查看其他命令。
    在这里插入图片描述
  5. 使用debug命令T单步执行每一个命令,观察各寄存器变化。
    在这里插入图片描述
  6. 到了INT 21指令,需要使用debug命令P来执行,表示终止程序。
    在这里插入图片描述
  7. 使用debug命令Q,退出debug,返回到command。
    在这里插入图片描述

4 小结

  1. 学习汇编的目的,是通过用汇编语言进行编程而深度地理解计算机基层的基本工作机理,达到可以随心所欲地控制计算机的目的。
  2. 我们的编程活动,大都是直接对硬件进行的,我们系统直接对硬件进行编程,却又不希望用机器码编程,我们用汇编语言编程,就要用到编辑器(edit)、编译器(masm)、连接器(link)、调试工具(debug)等所有工具,这些攻击都是在操作系统之上运行的程序。

参考文献

  1. 《汇编语言(第3版) 》王爽著,主要参考书籍和学习路线。
    百度云:https://pan.baidu.com/s/1TE1Egc0ZmeJfLP5zvamo0Q
    提取码:3y72
  2. 第一个程序01》小甲鱼零基础视频课程
  3. 第一个程序02》小甲鱼零基础视频课程
  4. 第一个程序03》小甲鱼零基础视频课程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【汇编语言05】第4章 第一个程序 的相关文章

  • 获取用户详细信息、计算年龄并显示所有信息的程序

    我启动了一些代码 但在将用户字符串输入保存到变量中时遇到问题 使用 ReadString 我可以提示用户输入字符串 但是将用户输入保存到名为 AskName1 的变量中 然后显示 AskName1 中保存的信息后 我发现它保存了用户输入的字
  • 如何使用 MASM 在控制台上进行输入/输出? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我用谷歌搜索了又搜索 但没有发现任何有用的东西 如何将输出发送到控制台 并通过程序集接受来自控制台的用户输入 我正在使用 MASM32 正如 filofel 所说 使用 Win3
  • x86 汇编器中“数据标签”的功能是什么?

    我目前正在按照 Kip Irvine 的 汇编语言 x86 编程 一书学习汇编编程 在书中 作者试图解释以下概念 data label 数据标签标识变量的位置 提供 在代码中引用变量的便捷方法 以下 对于 例如 定义一个名为 count 的
  • MASM SEG 运营商

    假设我们正在使用 MASM 6 1 16 位 大数据模型编写汇编代码 并且我们有一个名为 MY VAR 的变量 标签 一个名为 MY SEG 的段和一个名为 MY GROUP 的段组 假设 MY VAR 放置在 MY SEG 中 并且 MY
  • MASM:在 .data 声明中使用当前位置计数器 ($)

    我遇到了有关 MASM 中当前位置计数器的问题 这是我的汇编代码 我使用 Visual Studio 2013 Express 进行汇编 386 model flat stdcall stack 8192 ExitProcess proto
  • 如何判断我是处于编辑状态还是创建状态?蛋糕PHP

    我有一个模型 需要在保存之前进行一些处理 或在某些情况下进行编辑 但通常在简单编辑时不需要 事实上 如果我对大多数编辑进行处理 结果字段将是错误的 现在 我正在模型的 beforeSave 回调中工作 如何判断我是来自编辑还是添加 弗兰克
  • 程序集/Nasm - 分段错误(核心转储)错误

    我对 NASM 很陌生 我正在尝试执行我找到的在线 MASM 示例 但转换为 NASM 很痛苦 它正确编译并生成输出文件 但是当我尝试运行它时 它给出了分段错误 核心转储错误 我不知道它是什么 操作系统是Ubuntu 尝试在以下环境下执行编
  • Django 编辑用户配置文件

    我正在尝试在前面创建一个 编辑个人资料 表单 发生的情况是我的表单 我不是 100 确定 尝试创建一个用户 而不是查找当前用户并更新他的个人资料 所以我认为这就是问题所在 在这里检查了很多问题 但没有一个足够清楚 我尝试编辑的字段是电子邮件
  • x86 汇编等式 vs =

    我正在上一门 x86 汇编语言课程 它的进展速度相当快 本书一直在做一件事 但没有提及它是如何工作的 那就是在定义数据时使用 equ 和 运算符 所以看起来 equ 是用来定义常量的 但是 是一样的吗 如果我有一些代码 data count
  • 如何让用户编辑网页内容并保存给所有浏览者? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试创建一个以简单文本 Hello 开头的网站 然后 任何访问该网站的人都可以将内容更改为他们喜欢的内容 保存这些内容不仅是为了
  • 从寄存器中减去变量?错误A2022:指令操作数必须相同大小

    data num1 word 0FEEDh code main PROC mov ecx 0E4C7FFFDh ecx 0E4C7FFFD hex sub ecx num1 error on this line 我希望能够减去变量num1从
  • 使用通过参数传递的偏移量计算过程内部数组的长度,汇编语言 x8086

    所以我试图通过使用参数中的偏移量来获取数组的长度 但它只返回 lenhof 偏移量 我有什么办法可以做到这一点吗 INCLUDE Irvine32 inc multiply proto arr ptr dword data array dw
  • 如何在MASM中为一个项目编写和组合多个源文件?

    对于组装来说还是个新手 玩起来很有趣 我想将程序的功能拆分到多个文件中 特别是通过将类似的功能分组在一起进行组织 这些其他文件将由主文件 甚至希望其他非主文件 调用 我还没有成功 希望得到帮助 我不使用 IDE 更喜欢使用 notepad
  • 将 DB 变量中的字节值加载到 16 位寄存器中(符号或零扩展字节)

    我正在使用 MASM 编译器和 DOSBOX 我想将变量的值保存到寄存器中 我想保存num1值转化为cx登记 我怎样才能做到这一点 MODEL SMALL STACK 50H DATA num1 db 5 NL DB 0DH 0AH msg
  • mov ah、word_variable 上的“无效指令操作数”以及在 16 位数字上使用 imul

    这是我想要实现的目标 a x b x a y b y a z b z 我正在尝试在汇编中创建一个宏来执行上述计算 我在用WORDs 代表我所有的号码 这是我的代码 dotProduct MACRO A X A Y A Z B X B Y B
  • 8086 asm中的struct类型数据无法打印

    outputstring macro x push ax push dx mov ah 9 mov dx offset x int 21h pop dx pop ax endm inputstring macro x push ax pus
  • 处理负整数的汇编 MASM

    我被指示用汇编语言编写一个程序 该程序将执行以下算术 A B C D A E 当没有负值发挥作用时 我成功地做到了这一点 但假设 A 5 B 4 C 3 D 2 和 E 1 这给了我们 5 4 3 2 5 1 或 6 这就是我需要帮助的地方
  • 如何替换 randomForest r 包中的引导步骤

    首先是一些背景信息 这在 stats stackexchange 上可能更有趣 在我的数据分析中 我尝试比较不同机器学习方法在时间序列数据上的性能 回归 而不是分类 例如 我训练了一个 Boosting 训练模型 并将其与随机森林训练模型
  • Visual Studio 2017 上的简单装配程序

    386 model flat c stack 100h printf PROTO arg1 Ptr Byte data msg1 byte Hello World 0Ah 0 code main proc INVOKE printf ADD
  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代

随机推荐

  • 【软考】-高项-质量管理-子过程ITTO记忆技巧

    质量管理 贵管控 规划质量管理 1 记忆口诀 需求 干系 风险记住清 组织质量体系 策略盈 标杆成本质量流 思维测试 计划留 质量测量指标出 管理计划 记心头 2 故事 在一个叫做 需求城 的地方 有三个重要的公民 需求文件先生 干系人登记
  • Markdown中图片对齐方式及尺寸设置

    在markdown编辑模式下导入图片默认尺寸会很大 不符合预期效果 有时候需要对图片的对齐方式和尺寸大小进行调整 1 直接上传图片的原始效果 添加图片后默认尺寸很大 会占满整个宽度 2 图片尺寸及对齐方式调整 添加图片之后 图片底部 CSD
  • java对于Excel进行快速处理的框架EasyExcel(SpringBoot集成)

    一 EasyExcel介绍 EasyExcel是阿里巴巴开源的一个excel处理框架 以使用简单 节省内存著称 EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中 而是从磁盘上一行行读取数
  • Anchor-Free based目标检测

    CornerNet 预测左上角和右下角来得到最后的bounding boxes 所以最基本的需要两个feature map表示对应的Corner 称为heatmap top left 和 bottom right 将属于同一个object的
  • C++中template(模版)的使用

    我们在编程的时候总是会遇到一些类似的模块 只是模块中的形参的数据类型不同 导致我们要不断的去更改模块的 这里就涉及到重载的知识点了 例如以下的几种情况 函数1 int max int x int y return x gt y x y 函数
  • 分布式监控系统——Zabbix(3)配置

    文章目录 分布式监控系统 Zabbix 3 配置 一 监控项 1 定义一个不带参数的监控项 2 定义一个带参数的监控项 3 删除监控项 4 监控项存储的值 二 触发器 1 简介 2 触发器表达式 3 定义一个触发器 4 触发器的依赖关系 5
  • 项目4总结:MySQL数据表的检索

    目录 任务4 1 查询时选择列 1 基本查询语句 2 检索所有列 3 检索指定列 任务4 2 查询时选择行 1 查询指定记录 2 带IN关键字的查询 3 带BETWEEN AND的范围查询 4 带LIKE的字符匹配查询 5 查询空值 6 带
  • truncate和delete的区别

    两者都可以删除表中的数据 但是本质上是有区别的 两者使用方法如下 删除表中所有数据 DELETE FROM table name 删除表中部分符合条件的数据 DELETE FROM table name WHERE 删除表中所有数据 TRU
  • Google reCAPTCHA ----------验证码

    现有验证码的产品形态调研范围如下 基本涵盖了比较主流的验证码平台 Google reCAPTCHA 极验 阿里云 腾讯云 点触 网易易盾 螺丝帽 FunCaptcha 产品背景 reCAPTCHA起初是由CMU 卡耐基梅隆大学 设计 将OC
  • pip安装地址--清华源(国内常用镜像源)

    国内常用镜像源 清华大学 https pypi tuna tsinghua edu cn simple 阿里云 http mirrors aliyun com pypi simple 中国科学技术大学 http pypi mirrors u
  • Linux服务器在线扩容内存,redhat linux 在线扩容磁盘空间

    在惠普Proliant服务器上在线扩容Linux ext3类型的文件系统 服务器集成SA5i 内置硬盘 加SA532挂MSA500 划了一个阵列 全部做一个逻辑盘 设备名为 dev cciss c1d0 全部空间建立分区为 dev ccis
  • 箭头函数和普通函数的区别

    箭头函数 1 只有一个参数的时候 参数可以不加小括号 没有参数或2个及以上参数的 必须加上小括号 2 返回语句只有一条的时候可以不写 和return 会自动加上return的 返回多条语句时必须加上 和return 3 箭头函数在返回对象的
  • Mysql添加新用户,并设置数据库权限

    首先进入mysql mysql u root p 然后在数据库中使用 create DATABASE my test db 创建数据库 CREATE USER test user IDENTIFIED BY test pass 创建一个用户
  • 5种很牛的两位数乘法速算方法

    5种很牛的两位数乘法速算方法 第一种 十几乘以任意两位数 公式推导 10 b 10c d 100c 10 bc d bd 10 10c bc d bd 10 10c d bc bd 方法 如果c 1 公式是 10 b 10 d 10 10
  • 16款ChatGPT工具,太炸裂了,收藏!

    因公众号更改推送规则 请点 在看 并加 星标 第一时间获取精彩技术分享 点击关注 互联网架构师公众号 领取架构师全套资料 都在这里 0 2T架构师学习资料干货分 上一篇 ChatGPT研究框架 80页PPT 附下载 大家好 我是互联网架构师
  • ug装配绕轴旋转_UG绘制小吊扇模型,建模装配还能运动起来

    夏天来了 吾思小编来教大家用UG做一个小风扇给夏日带来一丝凉意吧 根据图纸建模 整体建模难度 简单 装配难度 简单 模型效果图如下 一共由五个零件组成 建模过程 先画零件1底座 1 绘制一个直径为120mm的圆拉伸10mm 2 倒斜角5mm
  • Scanner读取文件(按行读入)

    public class ScannerTest public static void main String args 其实 Scanner在使用结束之后 也是需要进行关闭的 调用close方法 try Scanner scanner n
  • 使用注解从AOP面对方法进行逻辑判断

    今天360文8热8凉1汤 不好意思走错了 需求 根据不同的登录设备对xxController层中的方法是否禁用 AOP解释 切面编程 灵魂画图 代码 1 建立一个注解SuiteDisable import java lang annotat
  • Unity获取鼠标滚轮信息

    Unity获取鼠标滚轮信息 UGUI获取滚轮信息 Input获取滚轮信息 UGUI获取滚轮信息 UGUI关于鼠标滚轮信息的获取有一个专门的接口IScrollHandler用于接收滚轮事件 继承该事件之后便需要实现函数OnScroll 如下
  • 【汇编语言05】第4章 第一个程序

    目录 0 前言 1 源程序从编写到执行 1 1 第1步 编写汇编源程序 1 2 第2步 对源程序进行编译连接 1 3 第3步 执行可执行文件中的程序 2 简单源程序示例及其组成 2 1 简单源程序示例 2 2 伪指令 2 3 源程序与程序