有件事我无法消化。我正在学习一些汇编程序,现在我正在学习寻址章节。我理解用于解除引用的括号的概念,但不知怎的,当我看到它的用法时,我就是无法理解它的要点。更准确地说,我的困惑是从这里开始的:
mov al, [L1]
Run Code Online (Sandbox Code Playgroud)
在这里,我假设 L1 作为示例,它是某种宏,稍后会替换机器代码中的真实地址,对吗?
所以这条指令的作用是:取消引用al寄存器(因为你几乎无法更改物理地址)并将值更改为存储在的值L1。
如果到目前为止一切正常:
mov [L1], al
Run Code Online (Sandbox Code Playgroud)
类比地意味着,一定已经存储了一个地址(因此这样做是有道理的)并且您将其更改为内存中的其他位置,对吗?
如果你能告诉我没关系,如果你没有看到任何错误,请这样做,这将使我可以继续学习。
最后一件事,NASM 在我的代码下添加了一堆0xAA55(这个序列应该结束程序吧?),为什么它出现了这么多次?
对于链接:
有人可以向我解释这个概念并为我提供一个理论示例和一个简单的代码吗?
我的想法是“每个表位置都指向散列到该位置的项目的链接列表(链)”,但我似乎无法说明实际发生的情况。
假设我们有 h(x)(哈希函数)= x/10 mod 5。现在哈希 12540, 51288, 90100, 41233, 54991, 45329, 14236,那会是什么样子?
对于开放寻址(线性探测、二次探测和每个 R 位置的探测),有人也可以向我解释一下吗?我尝试用谷歌搜索,但我似乎更加困惑了。
这都是相关的,我尽我所能将它们拼合起来,所以请耐心等待。
我对如何正确处理标签感到非常困惑。例如,在下面的代码位中,“ bne”转换为“ 00010101001001010000000000000001”,并且loopend的标签地址为0x00000020(32)
.text
la $a0, opOne
lw $a0, 0($a0)
la $a1, opTwo
lw $a1, 0($a1)
add $t0, $zero, $a0
addi $t1, $zero, 1
bne $t1, $a1, loopend
addi $t1, $t1, 1
loopend:
Run Code Online (Sandbox Code Playgroud)
当我向上移动loopend时,“ bne”变为“ 00010101001001011111111111111111”,loopend的地址变为0x00000008(8)
.text
la $a0, opOne
lw $a0, 0($a0)
loopend:
la $a1, opTwo
lw $a1, 0($a1)
add $t0, $zero, $a0
addi $t1, $zero, 1
bne $t1, $a1, loopend
addi $t1, $t1, 1
Run Code Online (Sandbox Code Playgroud)
因此,据我了解,在代码的第一位loopend是在八条指令之后,因此它的地址是4 * 8 = 32 = 0x00000020。在代码的第二位中,loopend是在两条指令之后,因此其地址为4 * 2或0x00000008。 …
我有两个问题:
为什么Modbus只允许247个从站连接到同一网络?
如何通过Modbus TCP/IP克服此限制?
我已经了解到8086 CPU有16位数据总线,Pentium CPU有32位数据总线,这意味着每个内存地址都有数据总线的大小.
例如:
16bit = 2^16 = 65,536
binary 0000 0000 0000 0000 ~ 1111 1111 1111 1111
hex 0000 0000 ~ FFFF FFFF
dec 000,000 ~ 65,535
65,536 / 1024 = 64 so can be 64kbyte of maximum memory address.
like 0x 0000,0000 ~ 0x FFFF,FFFF
32bit = 2^32 = 4,294,967,296
binary 0000 0000 0000 0000 0000 0000 0000 0000
~ 1111 1111 1111 1111 1111 1111 1111 1111
hex 0000 0000 0000 0000 ~ FFFF FFFF FFFF …Run Code Online (Sandbox Code Playgroud) 我正在解决一些间接寻址问题,我不确定如何正确计算字节数.我们得到这个代码:
.data
v1 db 9,7,5,3,1
v2 dw 0
v3 dw -1
v4 db '$'
mov dx,offset v2
mov ah,9
int 21h
Run Code Online (Sandbox Code Playgroud)
该问题询问在执行这些指令并且答案为4之后将向标准输出设备写入多少字节.
对于这个问题,我这样设置:
offset 0 1 2 3 4 5 6 7 8 9
data 09 07 05 03 01 00 00 FF FF 24
Run Code Online (Sandbox Code Playgroud)
我们将5移动到dx,写入两个字节00 05.然后我们设置dos代码将其写出来,所以我们的输出写出两个字节组成四个?如果我的逻辑错误,请纠正我.
假设我有一串ascii字符,例如"652 + 346*779 =",我想将一些字符从这个变量移到另一个变量......
缓冲区是字符串(在本例中为"652 + 346*779 =")lengthofnum是有问题的数字的长度(在这种情况下,346的长度为3)A_ascii是我正在尝试传输字符串的变量" 346" .
我有一个根本不起作用的循环,我无法弄清楚我应该使用什么寻址模式.emu8086讨厌到目前为止我尝试过的所有内容,并且使用MOV指令给出了关于语法的错误
mov cx,lengthofnum
dumploop1:
mov bx, offset buffer
;dump the number from buffer into A_ascii
mov A_ascii[cx],[bx]+cx
loop dumploop1:
Run Code Online (Sandbox Code Playgroud)
我收到以下错误代码:
(672) wrong parameters: MOV A_ascii[cx],[bx]+cx
(672) probably it's an undefined var: A_ascii[cx]
Run Code Online (Sandbox Code Playgroud) 我的考试即将开始,我完全坚持这个问题(见下文); 即使看模型答案也无济于事.我已经尝试阅读主题的主要文本,但仍然不知道如何做到这一点.如果有人能够逐步解决这个问题,我将非常感激.
"假设下面MIPS片段的第一条指令位于内存地址0x10001000.其他值是什么,并在bne和j指令中退出?"
Run Code Online (Sandbox Code Playgroud)1 0x10001000: addi $s0, $0, 5 2 0x10001004: sub $s2, $0, $s1 3 0x10001008: beq $s0, $s2, else 4 0x1000100C: add $s0, $0, $0 5 0x10001010: add $t0, $s2, $s0 6 0x10001014: j exit 7 0x10001018: else: addi $s1, $s0, -1 8 0x1000101C: exit:型号答案:
Run Code Online (Sandbox Code Playgroud)Else: 0000000000000011 Exit: 00000000000000010000000111
我还包含了原始问题图像的链接. http://i.imgur.com/NgHpZXs.png
我试图理解汇编 6502 中的这种寻址模式。
例如我们在程序中有这样的指令:
我们知道“text”标签低于$2000 - 高字节是20,低字节是00,累加器中我们有数字30。现在第一个问题是:当我输入时发生了什么这STA $80.
是否意味着我们存储的整个地址累加器是0080?现在假设我们在 $80 下放置数字 00,在 $81 下放置数字 20。Y 为零。现在为什么当我使用这个时:
sta ($80),y
Run Code Online (Sandbox Code Playgroud)
我得到的地址是2000?这是怎么回事?在0080下我们只有00(字节)而不是整个地址(2字节)2000。我知道($80)意味着我们去$80指向的地址。但我们只存储了 00,而不是整个地址 2000。如果有任何帮助,我将不胜感激。
我想获取包含特定字符串的特定工作表中第一个单元格的列地址。
这是我为此编写的代码:
Dim StringInQuestion As String
Dim ColumnRange1 As Range
NamedSheet.Select
Range("A1").Select
On Error Resume Next
Set FinalCell = Cells(1, 1).SpecialCells(xlLastCell)
FinalCellAddress = Cells(FinalCell.Row, FinalCell.Column).Address
Range(ColumnRange1).Select
Selection.Copy
Set ColumnRange1 = NamedSheet.Cells
Dim ColumnRange2 As Range
ColumnRange2 = ColumnRange1.Find(StringInQuestion)
Dim ColumnComposite As Variant
ColumnComposite = ColumnRange1.Address(ColumnAbsolute:=True)
Dim Column As Variant
'Format column address procured for further use (remove any numbers)
Dim intColumn As Integer
ColumnComposite = Trim(ColumnComposite)
For intColumn = 1 To Len(ColumnComposite)
If Not IsNumeric(Mid(ColumnComposite, intColumn, 1)) Then
Column = …Run Code Online (Sandbox Code Playgroud)