标签: addressing

汇编程序中的寻址

有件事我无法消化。我正在学习一些汇编程序,现在我正在学习寻址章节。我理解用于解除引用的括号的概念,但不知怎的,当我看到它的用法时,我就是无法理解它的要点。更准确地说,我的困惑是从这里开始的:

mov al, [L1]
Run Code Online (Sandbox Code Playgroud)

在这里,我假设 L1 作为示例,它是某种宏,稍后会替换机器代码中的真实地址,对吗?

所以这条指令的作用是:取消引用al寄存器(因为你几乎无法更改物理地址)并将值更改为存储在的值L1

如果到目前为止一切正常:

mov [L1], al
Run Code Online (Sandbox Code Playgroud)

类比地意味着,一定已经存储了一个地址(因此这样做是有道理的)并且您将其更改为内存中的其他位置,对吗?

如果你能告诉我没关系,如果你没有看到任何错误,请这样做,这将使我可以继续学习。

最后一件事,NASM 在我的代码下添加了一堆0xAA55(这个序列应该结束程序吧?),为什么它出现了这么多次?

assembly nasm addressing

2
推荐指数
1
解决办法
5424
查看次数

C++ 散列:开放寻址和链接

对于链接:

有人可以向我解释这个概念并为我提供一个理论示例和一个简单的代码吗?

我的想法是“每个表位置都指向散列到该位置的项目的链接列表(链)”,但我似乎无法说明实际发生的情况。

假设我们有 h(x)(哈希函数)= x/10 mod 5。现在哈希 12540, 51288, 90100, 41233, 54991, 45329, 14236,那会是什么样子?

对于开放寻址(线性探测、二次探测和每个 R 位置的探测),有人也可以向我解释一下吗?我尝试用谷歌搜索,但我似乎更加困惑了。

c++ hash addressing chaining

2
推荐指数
1
解决办法
3868
查看次数

MIPS标签寻址?

这都是相关的,我尽我所能将它们拼合起来,所以请耐心等待。

我对如何正确处理标签感到非常困惑。例如,在下面的代码位中,“ 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。 …

assembly mips machine-language labels addressing

2
推荐指数
1
解决办法
1万
查看次数

Modbus从站计数限制

我有两个问题:

  1. 为什么Modbus只允许247个从站连接到同一网络?

  2. 如何通过Modbus TCP/IP克服此限制?

networking modbus addressing master-slave tcp-ip

2
推荐指数
1
解决办法
855
查看次数

数据总线和寻址内存混淆

我已经了解到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)

c memory cpu addressing databus

2
推荐指数
1
解决办法
401
查看次数

汇编语言间接寻址

我正在解决一些间接寻址问题,我不确定如何正确计算字节数.我们得到这个代码:

.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代码将其写出来,所以我们的输出写出两个字节组成四个?如果我的逻辑错误,请纠正我.

assembly byte addressing

1
推荐指数
1
解决办法
388
查看次数

8086汇编:MOV部分字符串变为变量

假设我有一串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)

x86 assembly addressing mov

1
推荐指数
1
解决办法
7878
查看次数

MIPS - 如何查找分支和跳转指令的地址值

我的考试即将开始,我完全坚持这个问题(见下文); 即使看模型答案也无济于事.我已经尝试阅读主题的主要文本,但仍然不知道如何做到这一点.如果有人能够逐步解决这个问题,我将非常感激.

"假设下面MIPS片段的第一条指令位于内存地址0x10001000.其他值是什么,并在bne和j指令中退出?"

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
Run Code Online (Sandbox Code Playgroud)

我还包含了原始问题图像的链接. http://i.imgur.com/NgHpZXs.png

mips addressing

1
推荐指数
1
解决办法
2881
查看次数

6502 地址的汇编和表示

我试图理解汇编 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。如果有任何帮助,我将不胜感激。

indexing assembly 6502 addressing

1
推荐指数
1
解决办法
287
查看次数

获取表示字符串第一个实例的单元格的列地址 (VBA)

我想获取包含特定字符串的特定工作表中第一个单元格的列地址。

这是我为此编写的代码:

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)

excel vba addressing

-1
推荐指数
1
解决办法
6876
查看次数

标签 统计

addressing ×10

assembly ×5

mips ×2

6502 ×1

byte ×1

c ×1

c++ ×1

chaining ×1

cpu ×1

databus ×1

excel ×1

hash ×1

indexing ×1

labels ×1

machine-language ×1

master-slave ×1

memory ×1

modbus ×1

mov ×1

nasm ×1

networking ×1

tcp-ip ×1

vba ×1

x86 ×1