快捷搜索: 王者荣耀 脱发

汇编语言王爽第五部分(数据处理)

汇编数组

将datasg中的第一个字符串转为大写,将第二个字符串转为小写

assume cs:code,ds:datasg

datasg segment
 db BaSic
 db MinIx
datasg ends

codesg segment
start:
 mov ax,datasg
 mov ds,ax
 mov bx,0
 
 mov cx,5
 s:
 mov al,[bx+0]
 and al,11011111b;与
 mov [bx+0],al
 mov al,[bx+5]
 or al,00100000b;或
 mov [bx+5],al
 inc bx
 loop s
 mov ax,4c00h
 int 21h
codesg ends
end start

第一个字符串地址是从段地址为ds,偏移地址为0开始的5个字节 第二个字符串地址是从段地址为ds,偏移地址为5开始的5个字节 将第六位取0是大写字母 将第六位取1是小写字母 与C语言的数组类似 C语言a[i],b[i] 汇编语言:[bx+0],[bx+5]或者0[bx],5[bx]

汇编结构体

编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存到table段中 代码初始化 首先初始化栈段,数据段,table段

assume cs:code,ss:stacksg,ds:datasg,es:table

stacksg segment
  db 16 dup(0)
stacksg ends

datasg segment
  a db 1975,1976,1977,1978,1979,1980,1981,1982,1983
  db 1984,1985,1986,1987,1988,1989,1990,1991,1992
  db 1993,1994,1995


 
  b dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000
  dd 5937000


  c dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

  dw 11542,14430,15257,17800

datasg ends

table segment
  db 21 dup(year summ ne ?? )
table ends

初始化DS,SS,SP

mov ax,datasg
 mov ds,ax

 mov ax,stacksg
 mov ss,ax
 mov sp,16

 mov ax,table
 mov es,ax

因为懒得数数,所以在datasg数据前面用了a,b,c标识符 下面是将数据复制到table段行地址0-3和5-8

mov si,0
 mov bx,0
 mov di,0
 mov cx,21
s:
 mov si,0
 push cx
 mov cx,4
 s0:
 mov al,a[di]
 mov es:[bx+si],al;复制到table段
 mov al,[offset b+di]
 mov es:[bx+si+5],al;复制到table段
 inc di
 inc si
 loop s0
 add bx,10h
 pop cx
loop s

只要知道这个原理,其他的都一样 与C语言的结构体类似 typedef struct { char Year[4]; char NO_Data; unsigned int sunm char NO_Data; unsigned short People char NO_Data; unsigned short People_AVR char NO_Data; }company 定义21个company company Mycompany[21] 原理:获得数据的首地址然后用si,di,或者bx进行偏移. 比如要访问Mycompany[10]中的sunm的第三个元素,可以把bx设置为16*10,sunm偏移了6个字节,si为0-3,分别表示sunm的1-4位,一个Mycompany大小为16个字节,所以可以表示为[bx+si+5].

经验分享 程序员 微信小程序 职场和发展