如何建立二维数组,二维数组又是怎样调用的,求助!!!
我在百度并没有搜到汇编语言中二维数组的定义与使用!a db 10 dup (10 dup(0))——>数组是这样定义的吗?,如果是,那它的存储空间是连续,怎么能表示行列呢?
...
mov bx,0
mov si,0
mov al,a->请问这条语句中,bx表示行吗?,si表示列吗?
求解答
感谢!!!!!
汇编语言是低级语言,在汇编语言中貌似没有二维数组的概念
C语言中的二维数组到汇编语言以后就成这样了
#include <stdio.h>
int main(void)
{
int arr;
for(int i = 0; i < 3; ++i)
{
for(int j = 0; j < 4; ++j)
{
arr = 0;
}
}
return 0;
}
#include <stdio.h>
int main(void)
{
00E4F0D0push ebp
00E4F0D1mov ebp,esp
00E4F0D3sub esp,114h
00E4F0D9push ebx
00E4F0DApush esi
00E4F0DBpush edi
00E4F0DClea edi,
00E4F0E2mov ecx,45h
00E4F0E7mov eax,0CCCCCCCCh
00E4F0ECrep stos dword ptr es:
00E4F0EEmov eax,dword ptr
00E4F0F3xor eax,ebp
00E4F0F5mov dword ptr ,eax
int arr;
for(int i = 0; i < 3; ++i)
00E4F0F8mov dword ptr ,0
00E4F0FFjmp main+3Ah (0E4F10Ah)
00E4F101mov eax,dword ptr
00E4F104add eax,1
00E4F107mov dword ptr ,eax
00E4F10Acmp dword ptr ,3
00E4F10Ejge main+70h (0E4F140h)
{
for(int j = 0; j < 4; ++j)
00E4F110mov dword ptr ,0
00E4F117jmp main+52h (0E4F122h)
00E4F119mov eax,dword ptr
00E4F11Cadd eax,1
00E4F11Fmov dword ptr ,eax
00E4F122cmp dword ptr ,4
00E4F126jge main+6Eh (0E4F13Eh)
{
arr = 0;
00E4F128mov eax,dword ptr
00E4F12Bshl eax,4
00E4F12Elea ecx,arr
00E4F132mov edx,dword ptr
00E4F135mov dword ptr ,0
}
00E4F13Cjmp main+49h (0E4F119h)
}
00E4F13Ejmp main+31h (0E4F101h)
return 0;
00E4F140xor eax,eax
}
00E4F142push edx
00E4F143mov ecx,ebp
00E4F145push eax
00E4F146lea edx,ds:
00E4F14Ccall @_RTC_CheckStackVars@8 (0E4B341h)
00E4F151pop eax
00E4F152pop edx
00E4F153pop edi
00E4F154pop esi
00E4F155pop ebx
00E4F156mov ecx,dword ptr
00E4F159xor ecx,ebp
00E4F15Bcall @__security_check_cookie@4 (0E4B42Ch)
00E4F160mov esp,ebp
00E4F162pop ebp
00E4F163ret arr = 0;
00E4F128mov eax,dword ptr
00E4F12Bshl eax,4
00E4F12Elea ecx,arr
00E4F132mov edx,dword ptr
00E4F135mov dword ptr ,0
在汇编语言中就是一个一维数组
这是对数组的寻址部分 本帖最后由 57158597@qq.com 于 2018-6-17 17:49 编辑
mov al,a这行代码是错误的,什么意思都不代表
二维数组是可以用汇编表示的,就看你怎么理解和应用了
如下:
assume cs:codesg
data segment
sz db1,2,3,4, 5,6, 7,8,9,10,11,12,13,14,15,16 ;数组sz的全部内容
db 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
db 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
db 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
data ends
codesg segment
start: mov ds,offset sz ;把数组所在的段地址放入DS
mov bx,0*16 ;bx=0*16表示1行,1*16第2行,2*16第3行(这个0*16的表达是不对的,我这样写是方便看)
mov si,0 ;s=0标识第1列,si=1标识第2列以此类推
mov ax, ;这里的ax=1,1行1列的位置是1(也可以这么写mov ax,)
mov bx,2*16
mov si,5
mov ax, ;这里的ax=38,3行6列的位置
mov ax,4c00h
int 21h
codesg ends
end start 57158597@qq.com 发表于 2018-6-15 23:23
mov al,a这行代码是错误的,什么意思都不代表
二维数组是可以用汇编表示的,就看你怎么理解和应用了
...
也就是说需要3个一维数组,第1个和第2个一维数组用来存储第3个一维数组的地址,第3个一维数组用来存储数据?
57158597@qq.com 发表于 2018-6-15 23:23
mov al,a这行代码是错误的,什么意思都不代表
二维数组是可以用汇编表示的,就看你怎么理解和应用了
...
如果是这样,那2010存储单元可能会由于程序而被占用,怎么解决这种情况 人造人 发表于 2018-6-15 22:37
汇编语言是低级语言,在汇编语言中貌似没有二维数组的概念
C语言中的二维数组到汇编语言以后就成这样了
...
c语言的二维数组好理解,放在汇编还真的难理解。{:5_99:} 帝企鹅的日记 发表于 2018-6-15 23:48
如果是这样,那2010存储单元可能会由于程序而被占用,怎么解决这种情况
在数据段定义好,我等个详细点的代码给你看把,刚才写那个是临时写的 帝企鹅的日记 发表于 2018-6-15 23:50
c语言的二维数组好理解,放在汇编还真的难理解。
汇编语言中就没有二维数组
assume cs:codesg
data segment
sz db1,2,3,4, 5,6, 7,8,9,10,11,12,13,14,15,16 ;数组sz的全部内容
db 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
db 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
db 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
data ends
codesg segment
start: mov ds,offset sz ;把数组所在的段地址放入DS
mov bx,0*16 ;bx=0*16表示1行,1*16第2行,2*16第3行(这个0*16的表达是不对的,我这样写是方便看)
mov si,0 ;s=0标识第1列,si=1标识第2列以此类推
mov ax, ;这里的ax=1,1行1列的位置是1
mov bx,2*16
mov si,5
mov ax, ;这里的ax=38,3行6列的位置
mov ax,4c00h
int 21h
codesg ends
end start
这样看能理解了把? 本帖最后由 57158597@qq.com 于 2018-6-16 11:18 编辑
{:5_108:} {:5_108:} 人造人 发表于 2018-6-15 23:44
也就是说需要3个一维数组,第1个和第2个一维数组用来存储第3个一维数组的地址,第3个一维数组用来存储数 ...
不是这意思,我上面临时乱写的表达的意思有点不对,完整的发在后面了 57158597@qq.com 发表于 2018-6-16 00:32
不是这意思,我上面临时乱写的表达的意思有点不对,完整的发在后面了
嗯 57158597@qq.com 发表于 2018-6-16 00:32
不是这意思,我上面临时乱写的表达的意思有点不对,完整的发在后面了
好的,感谢{:5_106:} 帝企鹅的日记 发表于 2018-6-16 20:08
好的,感谢
答案对了就给个最佳答案呗 帝企鹅的日记 发表于 2018-6-16 20:08
好的,感谢
我后面发的代码你都没看到吧?我把最佳答案改成后面发的代码了 57158597@qq.com 发表于 2018-6-17 17:45
我后面发的代码你都没看到吧?我把最佳答案改成后面发的代码了
我看到了,前面的更容易理解
页:
[1]