汇编程序的二维数组的访问

;*********************************************************
TITLE 汇编程序的二维数组的访问
;*********************************************************


;*********************************************************
;程序运行平台说明
.386
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
;*********************************************************

;*********************************************************
;文件包含
INCLUDE Irvine32.inc
;*********************************************************


;*********************************************************
;数据段定义
.DATA
tablename  byte 10,42,5,6,1
RowSize=$-tablename
           byte 10,20,20,30,5
		   byte 20,85,74,61,10
strEnter byte 0dh,0ah,0
strSpace byte " ",0
;*********************************************************


;*********************************************************
;代码段定义
.CODE
main proc   
   ;设定外层循环的次数
   mov ecx,3
   ;表示行数
   xor esi,esi
     L1:
	   ;压入堆栈,方便我们在列循环时使用
	   push ecx
	   mov ecx,RowSize
	   ;ebx作为列数进行计算
	   xor ebx,ebx
	     L2:
		    ;开始输出	
			;获得每一行的数目,方便进行行的偏移		
			mov ax,RowSize
			;eax当中方的是行偏移
			mul esi
			;然后进行列偏移的计算									
			add eax,ebx	
			;因为每个数组元素都是byte所以使用dl来取出		
			mov dl,tablename[eax]			
			;eax清空单纯存放al
			xor eax,eax
			mov al,dl			
			call WriteInt
			mov edx,offset strSpace
			call WriteString
			;列偏移加一
			inc ebx;
		 loopd L2;
		 mov edx,offset strEnter
		 call WriteString
		 ;行数加一
		 inc esi;
	   pop  ecx
   loopd L1;
  exit
main endp
end main
;*********************************************************


汇编程序中二维数组的访问,不像高级程序设计语言中的那么简便,我们必须自己计算在数组首地址基础上的偏移,

结构化的设计,也就是外层行数,内层保存列数,外层循环和内层循环都是用ecx来作为标记,外层ecx,然后压入堆栈,被内层使用,

但是同时,ecx不方便用户来作为索引,因为ecx是由大变小,反向增长的,所以必须使用另外一个变量来从小到大的变化,这里esi用来记录行的大小,ebx用来记录列的大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值