二进制减法与汇编语言基础

二进制减法与汇编语言核心概念解析

35、设计一种无符号二进制整数的减法方法。通过从二进制数 10001000 中减去二进制数 00000101 来测试你的方法,得到结果 10000011。再用至少另外两组整数测试你的方法,且总是用较小的值减去较大的值。

一种减法方法是将被减数取反加 1 后与减数相加,并忽略最高位的进位。例如从 10001000 中减去 00000101 ,先将 00000101 取反得到 11111010 ,再加 1 得到 11111011 ,然后与 10001000 相加:

10001000
+ 11111011
= 1 10000011

忽略最高位进位后结果为 10000011

另外两组测试:

  1. 11001100 中减去 00110011 00110011 取反加 1 后为 11001101
11001100
+ 11001101
= 1 10011001

忽略进位后结果为 10011001

  1. 10101010 中减去 00001010 00001010 取反加 1 后为 11110110
10101010
+ 11110110
= 1 10100000

忽略进位后结果为 10100000

36、请给出三个不同的指令助记符示例。

mov、add、sub

37、什么是调用约定,它在汇编语言声明中是如何使用的?

调用约定

调用约定是指调用过程的底层细节,需考虑的细节包括:

  • 被调用过程必须保留哪些寄存器;
  • 传递参数的方法(寄存器、栈、共享内存等);
  • 调用程序向过程传递参数的顺序;
  • 参数是按值传递还是按引用传递;
  • 过程调用后栈指针如何恢复;
  • 函数如何向调用程序返回值。

在汇编语言声明中,调用约定规定了参数传递和栈清理的标准化顺序。

例如:

  • C调用约定 :C和C++语言使用,子程序参数以逆序压入栈;
  • STDCALL调用约定 :描述了调用Windows API函数的协议。

不同语言调用汇编语言过程时,外部标识符需有兼容的命名约定,以保证链接器能正确解析引用。

38、如何在程序中为栈预留空间?

可以使用 STACK 指令为栈预留足够的空间。例如在 Irvine32 库中,使用 .stack 4096 预留 4096 字节的栈空间;通常情况下,使用 .STACK 200h 指令可预留 512 字节。

39、解释大端序(big endian)和小端序(little endian)的区别,并查找该术语的起源。

字节序(Endianness)

大端序是指数据的高位字节存于低地址,低位字节存于高地址,即按从高到低的顺序存储;小端序则相反,数据的低位字节存于低地址,高位字节存于高地址,按从低到高的顺序存储。

例如对于十六进制数 12345678h
- 大端序 存储顺序为: 12h 34h 56h 78h
- 小端序 存储顺序为: 78h 56h 34h 12h

起源

关于该术语的起源,它源自乔纳森·斯威夫特的小说《格列佛游记》,书里小人国因为吃鸡蛋先打破大端还是小端产生了分歧,计算机领域借用这个概念描述字节存储顺序。

40、为什么你会在代码中使用符号常量而不是整数文字量?

符号常量不占用存储,其值在运行时不会改变,仅在汇编程序扫描程序时使用;而整数文字量可能不具备这些特性,所以使用符号常量能避免存储占用和运行时的值改变问题。

41、源文件和列表文件有什么不同?

源文件是程序的原始代码,而列表文件包含程序源代码副本、行号、每条指令的数字地址、每条指令的机器码字节(十六进制)以及符号表。符号表包含所有程序标识符、段的名称及相关信息。

42、数据标签和代码标签有什么不同?

数据标签用于标识变量的位置,方便在代码中引用变量,无特殊结尾字符;代码标签位于程序的代码区域,用于跳转和循环指令的目标,必须以冒号(:)结尾。

43、标识符不能以数字开头。判断这句话是否正确,并说明原因。

这句话是正确的。这是编程领域的常见规则。在许多编程语言里,标识符用于命名变量、函数、类等元素,为保证语法清晰和避免与数字常量混淆,规定不能以数字开头。例如在 Python、Java、C++ 等语言中都遵循此规则。

44、汇编语言指令在运行时执行。

错误,存在非运行时执行的汇编语言指令,并非所有汇编语言指令都在运行时执行。

45、MOV是指令助记符的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值