- [zhijian] 习惯了小写。看大写不舒服。 08/10 19:11
- [fpamc] 不错, 08/10 07:59
- [fpamc] 不错不错,学习了。 07/31 09:44
- [mengjiangtao] 正确答案补上: 第二题选择C;第四题选择C 嘻嘻 05/13 13:49
- [tomato] 第二题和第四题做错了。 05/10 23:25
- [mengjiangtao] 哦,看来还是由人有绝对的主导权。嘿嘿。谢谢。 05/07 20:52
- [tomato] 可以写个程序,执行循环3次操作。后面章节会讲到的。 05/06 22:42
- [tomato] cs:ip指向的内存单元中的数据当作指令来执行,ds,ss,es等指向的内存单元中的数据当作数据。 05/06 22:36
- [tomato] 建议上机实验验证一下结果,并且,都要是具体数据。 05/06 22:34
- [mengjiangtao] 0ff0 * 16 左移一位 ff00 + 0100 = 1 0000 05/06 19:17
[2012-08-09 17:51] 第八章实验
经过1天的努力,终于完成了这个实验。
总结出来几个错点,table的值增量为10h,不是16H,4个字节中需要mov两次,才能将4个字节完全mov掉,做之前一定要先想好并确定你要用哪些寄存器,段寄存器,用来做什么,不能有一点的模糊,注意人均收入是2个字节。下面的这个是我最初的脑中闪现的第一个思路
ASSUME CS:CODESG
DATA SEGMENT
DB '1975','1976','1977','1978','1979','1980','1981','1982'
DB '1983','1984','1985','1986','1987','1988','1989','1990'
DB '1991','1992','1993','1994','1995'
DD 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
DD 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
DW 3,7,9,13,28,38,130,220,476,779,1001,1442,2258,2793,4037,5635,8226
DW 11542,14430,15257,17800
DATA ENDS
TABLE SEGMENT
DB 21 DUP ('YEAR SUM NE ?? ')
TABLE ENDS
CODESG SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AX,TABLE
MOV ES,AX
MOV SI,0
MOV DI,0
MOV BP,0
MOV BX,0
MOV CX,21
;YEAR WRITE
S0:MOV DX,DS:[SI]
MOV ES:[BP],DX
MOV DX,DS:[SI+2H]
MOV ES:[BP+2H],DX
;INCOME WRITE
MOV DX,' '
MOV ES:[BP+4H],DX
MOV DX,DS:[SI+54H]
MOV ES:[BP+5H],DX
MOV DX,DS:[SI+54H+2H]
MOV ES:[BP+7H],DX
;STAFF NUMBER
MOV DX,' '
MOV ES:[BP+9H],DX
MOV DX,DS:[DI+00A8H]
MOV ES:[BP+0AH],DX
;AVG NUMBER
MOV DX,' '
MOV ES:[BP+0CH],DX
MOV AX,ES:[BP+5H]
MOV DX,ES:[BP+7H]
DIV WORD PTR ES:[BP+0AH]
MOV ES:[BP+0DH],AX
MOV DX,' '
MOV ES:[BP+0FH],DX
;
ADD SI,4H
ADD DI,2H
ADD BP,10H
LOOP S0
MOV AX,4CH
INT 21H
CODESG ENDS
END START
用栈的是看到论坛里发的,对比一下,结果一样,需要借鉴和保存一下。(数据段的定义就不写拉)
STACKS SEGMENT
DB 16 DUP (0)
STACKS ENDS
ASSUME CS:CODES,DS:DATAS,SS:STACKS
CODES SEGMENT
START:
;相关寄存器初始化
MOV AX,DATAS
MOV DS,AX
MOV AX,TABLE
MOV ES,AX
MOV AX,STACKS
MOV SS,AX
MOV SP,16
MOV BX,0
MOV BP,0
MOV DI,0
MOV SI,0
MOV CX,21
cycle: ;使用栈复制年份
PUSH [DI].0
PUSH [DI].2
POP ES:[BP].2
POP ES:[BP].0
;使用栈复制收入
PUSH 54H.[DI].0
PUSH 54H.[DI].2
POP ES:[BP].7
POP ES:[BP].5
;使用栈复制雇员数
PUSH 0A8H.[SI]
POP ES:[BP].0AH
;计算人均收入
MOV AX,ES:[BP].5
MOV DX,ES:[BP].7
DIV WORD PTR ES:[BP].0AH
MOV ES:[BP].0DH,AX
ADD SI,2H
ADD DI,4H
ADD BP,10H
loop cycle
MOV AH,4CH
INT 21H
CODES ENDS
END START
总结出来几个错点,table的值增量为10h,不是16H,4个字节中需要mov两次,才能将4个字节完全mov掉,做之前一定要先想好并确定你要用哪些寄存器,段寄存器,用来做什么,不能有一点的模糊,注意人均收入是2个字节。下面的这个是我最初的脑中闪现的第一个思路
ASSUME CS:CODESG
DATA SEGMENT
DB '1975','1976','1977','1978','1979','1980','1981','1982'
DB '1983','1984','1985','1986','1987','1988','1989','1990'
DB '1991','1992','1993','1994','1995'
DD 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
DD 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
DW 3,7,9,13,28,38,130,220,476,779,1001,1442,2258,2793,4037,5635,8226
DW 11542,14430,15257,17800
DATA ENDS
TABLE SEGMENT
DB 21 DUP ('YEAR SUM NE ?? ')
TABLE ENDS
CODESG SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AX,TABLE
MOV ES,AX
MOV SI,0
MOV DI,0
MOV BP,0
MOV BX,0
MOV CX,21
;YEAR WRITE
S0:MOV DX,DS:[SI]
MOV ES:[BP],DX
MOV DX,DS:[SI+2H]
MOV ES:[BP+2H],DX
;INCOME WRITE
MOV DX,' '
MOV ES:[BP+4H],DX
MOV DX,DS:[SI+54H]
MOV ES:[BP+5H],DX
MOV DX,DS:[SI+54H+2H]
MOV ES:[BP+7H],DX
;STAFF NUMBER
MOV DX,' '
MOV ES:[BP+9H],DX
MOV DX,DS:[DI+00A8H]
MOV ES:[BP+0AH],DX
;AVG NUMBER
MOV DX,' '
MOV ES:[BP+0CH],DX
MOV AX,ES:[BP+5H]
MOV DX,ES:[BP+7H]
DIV WORD PTR ES:[BP+0AH]
MOV ES:[BP+0DH],AX
MOV DX,' '
MOV ES:[BP+0FH],DX
;
ADD SI,4H
ADD DI,2H
ADD BP,10H
LOOP S0
MOV AX,4CH
INT 21H
CODESG ENDS
END START
用栈的是看到论坛里发的,对比一下,结果一样,需要借鉴和保存一下。(数据段的定义就不写拉)
STACKS SEGMENT
DB 16 DUP (0)
STACKS ENDS
ASSUME CS:CODES,DS:DATAS,SS:STACKS
CODES SEGMENT
START:
;相关寄存器初始化
MOV AX,DATAS
MOV DS,AX
MOV AX,TABLE
MOV ES,AX
MOV AX,STACKS
MOV SS,AX
MOV SP,16
MOV BX,0
MOV BP,0
MOV DI,0
MOV SI,0
MOV CX,21
cycle: ;使用栈复制年份
PUSH [DI].0
PUSH [DI].2
POP ES:[BP].2
POP ES:[BP].0
;使用栈复制收入
PUSH 54H.[DI].0
PUSH 54H.[DI].2
POP ES:[BP].7
POP ES:[BP].5
;使用栈复制雇员数
PUSH 0A8H.[SI]
POP ES:[BP].0AH
;计算人均收入
MOV AX,ES:[BP].5
MOV DX,ES:[BP].7
DIV WORD PTR ES:[BP].0AH
MOV ES:[BP].0DH,AX
ADD SI,2H
ADD DI,4H
ADD BP,10H
loop cycle
MOV AH,4CH
INT 21H
CODES ENDS
END START
评论次数(2) |
浏览次数(309) |
类型(小试验) |
收藏此文 |