实验要求:将ARY数组中的所有元素以10进制有符号输出

 

 
  
1 STA SEGMENT STACK
2 DW 40H DUP(?)
3 TOP LABEL WORD
4 STA ENDS
5
6 DATA SEGMENT
7
8
9 ARY DW 5 ,6B3DH,0FFFFH, 2 , 40000 , 1 ; 存入ARY数组中的数分别为数组的大小,相应的元素(有符号数)
10  
11 DATA ENDS
12
13 CODE SEGMENT
14 ASSUME CS: CODE, SS: STA, DS: DATA
15
16 MAIN PROC FAR
17 MOV AX,STA
18 MOV SS,AX
19 LEA SP,TOP
20 MOV AX,DATA
21 MOV DS,AX
22
23
24
25 MOV SI, 0
26 MOV BP,ARY[SI]
27 L1: ADD SI, 2
28 MOV BX,ARY[SI]
29 OR BX,BX
30 JNS L20 ; 符号的判断,若sp为0时转移(为正数)-------------------1
31  
32 MOV DL, ' - ' ; 若为负数(最高位为1)
33   MOV AH, 2
34 INT 21H
35 NEG BX ; 求其补数
36
37
38
39 L20:
40
41 MOV AX,BX
42 MOV CX, 0
43
44 L30: XOR DX,DX
45 MOV BX, 10
46 DIV BX
47 PUSH DX ; 得出的十进制数的每一位进栈
48 INC CX
49 CMP AX, 0
50 JNE L30
51
52
53 L4: POP DX
54 ADD DL,30H
55 MOV AH, 2
56 INT 21H
57 LOOP L4 ; 出栈,输出十进制形式的元素
58
59
60
61 MOV DL, ' '
62 MOV AH, 2
63 INT 21H
64 DEC BP ; 前面用BP记录下数组的大小
65 JNE L1
66
67
68
69 MOV AH,4CH
70 INT 21H
71 MAIN ENDP
72 CODE ENDS
73 END MAIN
74

 

 

 

同理:可以进行功能的拓展,例如通过键盘以任何进制形式输入有限个数组元素,以十进制,十六进制,二进制等形式输出     (一定要谨记,机器中存储数据只有二进制,只是通过另一种形式输出结果而已)。

 

我遇到的困难,主要输寄存器数量的不足,在存储数组大小的寄存器中我用了BP(基址指针),能用,但不知道这样是否合理,嘻嘻。

 

学到的知识:

   1 数据段的应用,要赋值,一定要记住!

   2 寄存器的间接寻址方式,在16位寻址时可用的寄存器是BX,BP,SI,DI,其形式有

     MOV AX,COUNT[SI]

     MOV AX,[COUNT+SI]

  3 判断跳转语句(转移指令)

    JMP 标号 --无条件转移指令

    JXX 标号 --条件转移指令

    one,根据PSW的状态来决定转移(CF,OF,XF,ZF)

          JC(CF为1时转移)   JNC (CF为0时转移)

          其它同理

         ----------- 1行用了JNS来判断最高位的符号!

    two,根据比较两个无符号数,根据其大小关系来转移

          JA 大于  JB 小于 JE 等于 N非    JAE 大于等于

 

          根据比较两个有符号数大小转移

         JG          JL         JE       N

        

          根据CX的值转移

          JCXZ 标号

   

转载于:https://www.cnblogs.com/SCAU_que/articles/1714225.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值