注册 登录
编程论坛 汇编论坛

这是我汇编程序处女作品,但是漏洞百出~~求高人指点指点啊

wangtong0213 发布于 2011-12-18 20:28, 1449 次点击
编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。
DATA SEGMENT
  DA1 DW ?,2BH,?,3DH,?,20H,'$'
  DA2 DW ?,2DH,?,3DH,?,20H,'$'
  X DW ?
  Y DW ?
DATA ENDS
STACK SEGMENT PARA STACK
  DW 20H DUP(0)
STACK ENDS
CODE SEGMENT
  ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
      MOV DS,AX
      MOV AH,01H
      INT 21H
      MOV SI,OFFSET DA1
      MOV DI,OFFSET DA2
      MOV AX,[SI]
      CMP AL,9
      JLE L0
      ADD AL,7
   L0:ADD AL,30H
      MOV AH,01H
      INT 21H
   L1:MOV AX,[SI+4]
      MOV AH,01H
      INT 21H
      JMP L2
   L2:MOV AX,X
      MOV BX,Y
      ADD AX,BX
      MOV [SI+8],AX
      MOV AX,[SI+8]
      MOV DX,AX
      MOV AH,02H
      INT 21H
   L3:MOV AX,[DI]
      CMP AL,9
      JLE L0
      ADD AL,7
   L4:MOV AX,[DI+4]
      MOV AH,01H
      INT 21H
   L5:MOV AX,X
      MOV BX,Y
      SUB AX,BX
      MOV [DI+8],AX
      MOV AX,[DI+8]
      MOV DX,AX
      MOV AH,02H
      INT 21H
   L6:MOV AH,09H
      INT 21H
      MOV AH,4CH
      INT 21H
CODE ENDS
  END START
怎么说呢,这个程序我编出来感觉编的什么都不是。我对什么时候用AL,什么时候用AX,什么时候用ax,什么时候用bx,cx都很迷惑,希望能得到解答,谢谢啦
                                                                                            
        
      
                                                                                 
10 回复
#2
zaixuexi2011-12-18 21:18
程序代码:
DATA SEGMENT
  DA1 DW ?,2BH,?,3DH,?,20H,'$'
  DA2 DW ?,2DH,?,3DH,?,20H,'$'
  X DW ?
  Y DW ?
DATA ENDS
STACK SEGMENT PARA STACK
  DW 20H DUP(0)
STACK ENDS
CODE SEGMENT
  ASSUME CS:CODE,DS:DATA,SS:STACK
START:
      MOV AX,DATA
      MOV DS,AX
      MOV AH,01H
      INT 21H            ;getchar();
      MOV SI,OFFSET DA1  ;unsigned short *dp = da1;
      MOV DI,OFFSET DA2  ;unsigned short *q = da2;
      MOV AX,[SI]        ;unsigned short a = ???;
      CMP AL,9
      JLE L0
      ADD AL,7
   L0:
      ADD AL,30H
      MOV AH,01H
      INT 21H
   L1:
      MOV AX,[SI+4]
      MOV AH,01H
      INT 21H
      JMP L2
   L2:
      MOV AX,X
      MOV BX,Y
      ADD AX,BX
      MOV [SI+8],AX
      MOV AX,[SI+8]
      MOV DX,AX
      MOV AH,02H
      INT 21H
   L3:
      MOV AX,[DI]
      CMP AL,9
      JLE L0
      ADD AL,7
   L4:
      MOV AX,[DI+4]
      MOV AH,01H
      INT 21H
   L5:
      MOV AX,X
      MOV BX,Y
      SUB AX,BX
      MOV [DI+8],AX
      MOV AX,[DI+8]
      MOV DX,AX
      MOV AH,02H
      INT 21H
   L6:
      MOV AH,09H
      INT 21H
      MOV AH,4CH
      INT 21H
CODE ENDS
  END START
我写不下去了,你再仔细检查下你的代码,你的疑惑是对他们不了解,再去看看书,不急着写代码
#3
wangtong02132011-12-18 21:49
回复 2楼 zaixuexi
只想用she的一首歌来形容《他还不懂》。后边两条注释我都没看懂~~
#4
zaixuexi2011-12-18 22:01
以下是引用wangtong0213在2011-12-18 21:49:57的发言:

只想用she的一首歌来形容《他还不懂》。后边两条注释我都没看懂~~
你想说什么?我看晕了,SHE?,谁还不懂?
#5
zaixuexi2011-12-18 22:23
不要在我这个版块说些莫名其妙的话
#6
wangtong02132011-12-20 14:24
额···我不懂···能不能用中文给我解释一下最后三个注释是什么意思啊?谢谢了
#7
zaixuexi2011-12-20 16:16
你的代码start开始的第7句MOV AX,[SI],你想取什么数据,我就没看明白,你先把这个解释一下
#8
wangtong02132011-12-20 17:03
就是想把DA1数据段里的加号前边的那个数据赋给AX,我觉得输入的应该是十进制的数,就想着把十进制转化成十六进制~~然后再取加号后边的数变成十六进制,最后两个数相加相减得出结果,大概就是想按这个思路编来着~~版主觉得这个程序还有改的必要吗?我是觉得好像哪哪都有问题···题目当中说是多字节,要是两个数字节不一样该怎么编呢?对我这个水平的人来说,毫无头绪,瞬间让我觉得头大
#9
zaixuexi2011-12-20 17:45
就是想把DA1数据段里的加号前边的那个数据赋给AX
1.数据的值是随机数?
 DA1 DW ?,2BH,?,3DH,?,20H,'$'
2.我觉得输入的应该是十进制的数
 MOV AH,01H
 INT 21H
 这两句是你的输入?你的意思是输入完了数据会自动进入DA1?
3.后面的没看,感觉代码对的还挺整齐的,不会让人觉得看着反感,还不错
基于第1点和第2点,所以我就不想写注释了,你先查下DOS系统中断中关于输入的用法
#10
wangtong02132011-12-20 18:44
谢谢版主了。
#11
zaixuexi2011-12-20 20:27
客气了,欢迎你来问问题
1