assume cs:codesg,ds:datasg,es:table
datasg 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个年份.
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上是21年公司的总收入的dword整型数.
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;以上是表示21年公司雇员人数的21个word型数据.
datasg ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
codesg segment
start:mov ax,datasg
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov si,0
mov di,0
mov cx,21
s: mov ax,[bx]
mov es:[di],ax
mov ax,[bx+2]
mov es:[di+2],ax
;以上是将年份写入TABLE段中.
mov ax,54h[bx]
mov es:5h[di],ax
mov dx,56h[bx]
mov es:7h[di],dx
;以上是将收入放进TABLE段
mov ax,0A8h[si]
mov es:0Ah[di],ax
;以上将人员写入TABLE指定单元
mov ax,54h[bx]
div word ptr ds:0A8H[si]
mov es:0Dh[di],ax
;以上将商放进TABLE段中.
add bx,4
add di,10h
add si,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
;总结:通过此程序,引入了结构化程序设计,结构化程序的开始,将使得程序的功能更强大,更清晰,更易读,思维方式的转换也得转换.
;寻址方式更灵活: bx,si,di,bp,四个寄存器.在8086中只有这四个寄存器才能用在[...]中.[bx+bp][si+di]错误,但BX,BX都可以相续的和SI,DI相加.MOV指令不能同时对两个内存单元处里.
;在给寄存器传值的时候,如果值是字母头,需在前加上0.
;寻址是从偏移址址开始,如mov ax,[01],不要理解成是从下一个字节开始.由其是对字型数据操作的时候.
;对于两个数据的基本问题是所有程序都有的,数据在那里,有多长,有什么算法,结果放到那里,等
- [chinatree] 对于双重循环取决于LOOP的位置?怎么说呢? 09/29 15:27
- [rotapple] 哦。是edit啊。晕。我以为这个UI界面是你写出来的。 08/25 18:32
- [rotapple] 这是什么书来的?第四章有这东西吗? 我怎么没见过。 08/25 18:30
- [rotapple] 发多张图是这样的。 你先要把图传到某个地方,比如百度空间。 然后再用[img]地址[/img]这 08/25 18:29
- [rotapple] ;这里为什么不是3F呢,因为3F-3F就等于0,loop就停止了。 你问了好多这个。 0-63 08/25 18:25
- [chinatree] 哪个题呀? 08/25 17:29
- [ameteur] 我试着用mov cx,[5],第一次程序可以成功执行,第二次就不行了。 08/25 17:07
- [ameteur] 我知道,但有一个问题,它是从mov ax,4c00H 前的复制,而不是整个,我可以用 sub cx, 08/25 17:05
- [chinatree] 第一个不用dl试试。 第二个可以不用 mov cx,0016h ,因为当程序加载好cx保存的就是 08/23 18:18
- [chinatree] 在多少页呀,起码最上一行和最下一行我就不知道怎么显示的 08/18 11:51
- [scuzg] 我是scuzg,QQ号是914933602,有空联络、讨论哈! 10/10 22:45