标签:ted list tool code asm 数位 数据处理 数据 mod
计算机是进行数据处理,运算的机器,所以存在两个问题:
这两个问题,必须在机器指令中给出说明(有时候是明确的,有时候是隐式的),否者计算器就无法工作。
定义的描述性符号:
总结:
[...]
中进行内存寻址。[...]
中,他们可以单个出现,或者以组合形式出现(组合中不能有其他寄存器,但可以有idata)数据处理大致可分为三类:读取,写入,运算
指令执行前,所要处理的数据可以在3个地方:cpu内部,内存,端口
定位内存单元的方法,即称为寻址方式
前面将到分为隐式给出和显式给出,例如通过寄存器和push,pop等方法就是隐式给出。
加入不能够明确指定数据长度的化,就需要显式给出数据长度。显式给出数据长度的方法有ptr
指令,例如:
mov word ptr ds:[0], 1
mov byte ptr ds:[0],1
inc ...
add ...
div指令为除法指令
被除数 / 除数 = 商......余数
有用到过db和dw,例如:
db 1 ;占1个字节
dw 1 ;占1个word(2个字节)
dd用来定义dword(double word,双子)。dd 1
则占用2个word(4个字节)。
dup是一个用于定义数据的操作符,由编译器识别。和db,dw,dd配合使用,用来进行数据的重复定义。
例如:
db 3 dup (0)
db 3 dup(0,1,2)
db 3 dup (‘abc‘,‘ABC‘)
答案
assume cs:code, ds:data, es:table
data segment
db ‘1975‘, ‘1976‘, ‘1977‘, ‘1978‘, ‘1979‘, ‘1980‘, ‘1981‘, ‘1982‘, ‘1983‘
db ‘1984‘, ‘1985‘, ‘1986‘, ‘1987‘, ‘1988‘, ‘1989‘, ‘1990‘, ‘1991‘, ‘1992‘
db ‘1993‘, ‘1994‘, ‘1995‘
; 21年, 4*21=84个字节
dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
; 21年每年总收入,84字节
dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8826
dw 11542, 14430, 15247, 17800
; 21年每年雇佣人数, 42字节
data ends
table segment
db 21 dup (‘year summ ne ?? ‘)
table ends
stack segment
dw 16 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, table
mov es, ax
mov bx, 0
mov si, 0
mov di, 0
mov cx, 21
s0:
mov ax, 0[bx].[0]
mov es:[si].[0], ax
mov ax, 0[bx][2]
mov es:[si].[2], ax
mov ax, 84[bx].[0]
mov es:[si].[5], ax
mov ax, 84[bx][2]
mov es:[si].[7], ax
mov ax, 168[di].[0]
mov es:[si].[10], ax
mov ax, es:[si].[5] ; 计算人均收入
mov dx, es:[si].[7]
div word ptr es:[si].[10]
mov es:[si].[13], ax
add bx, 4
add si, 10H
add di, 2
loop s0
mov ax, 4c00H
int 21H
code ends
end start
table段的dup实际定义了21*16个字节,空格也在对应的位置填上了。
标签:ted list tool code asm 数位 数据处理 数据 mod
原文地址:https://www.cnblogs.com/freesfu/p/11070057.html