微机实验 MASM 汇编实现进制转换

微机实验 MASM 汇编实现进制转换

        电子系同学 YLY 的微机实验,x86 MASM 汇编,DOS 21H 中断,输入一个 4 位的十进制数字,输出二进制和十六进制。

        程序有问题,让我帮忙看看,两人却几乎同时发现错误所在,囧。。。

        我干脆把它修改正确了,放上来,我修改的地方都做了说明。

        我写汇编是用 NASM 的,对 MASM 不熟,尽管我也是从 MASM 开始学习汇编的。所以程序中的代码我不完全会写,但是修改程序逻辑还是可以的。


  1 DATA    SEGMENT
  2 INF1 DB  " PLEASE INPUT A NUMBER: $  " ;提示语言
  3 INF2 DB  " OH NO. THIS IS NOT ALLOWED "
  4 INPUT     DB  4  DUP( 0 )
  5 RESULT  DW  ?
  6 SIXTEEN DB  4  DUP( 0 )
  7 DATA    ENDS
  8
  9 SSEG SEGMENT STACK  ' STACK '
 10         DW  100  DUP( ? )
 11 SSEG ENDS
 12
 13 CODE    SEGMENT
 14     ASSUME DS:DATA, CS:CODE, SS:SSEG
 15
 16 START:  MOV AX,DATA
 17     MOV DS,AX
 18     LEA DX,INF1
 19     LEA SI,INPUT
 20     MOV AH, 9
 21         INT 21H
 22     MOV AX, 0
 23     MOV CX, 4
 24
 25 JUDGE:  MOV AH, 1   ;判断是否符合要求
 26     INT 21H
 27     CMP AL,30H
 28     JB JUDGE
 29     CMP AL,39H
 30     JA JUDGE
 31     MOV [SI],AL
 32     INC SI
 33     LOOP JUDGE
 34     MOV CX, 4
 35     MOV DL, '   '
 36     MOV AH,02H
 37     INT 21H
 38     XOR AX,AX
 39     MOV BX, 0               
 40     LEA SI,INPUT
 41
 42 AGAIN:    ADD AX,AX    
 43     MOV BX,AX
 44     ADD AX,AX
 45     ADD AX,AX
 46     ADD AX,BX
 47     MOV BH, 0
 48     MOV BL,[SI] 
 49     SUB BL,30H
 50     ADD AX,BX ;部分和计算
 51     INC SI
 52     LOOP AGAIN
 53     MOV CX, 16
 54     MOV BX,AX
 55     ; MOV DX,AX ; coreBugZJ delete
 56     push ax     ; coreBugZJ insert
 57
 58 PRINT:    ROL BX, 1
 59     JC BIG
 60     MOV DL,30H
 61     MOV AH,02H
 62     INT 21H
 63     LOOP PRINT
 64     JMP AD
 65 BIG:    MOV DL,31H
 66     MOV AH,02H
 67     INT 21H
 68     LOOP PRINT
 69  AD:    MOV DL, '   '
 70     MOV AH,02H
 71     INT 21H
 72
 73 NEXT:   ; MOV AX,DX ; coreBugZJ delete
 74     pop ax      ; coreBugZJ insert
 75     mov dx, ax  ; coreBugZJ insert
 76     MOV DI,OFFSET SIXTEEN
 77     MOV BX,AX
 78     push ax     ; coreBugZJ insert
 79
 80     ; coreBugZJ  NEXT4 - NEXT3 - NEXT2 - NEXT1   <<==   NEXT1 - NEXT2 - NEXT3 - NEXT4
 81
 82     AND BH,0F0H
 83     MOV CL, 4
 84     SHR BH,CL
 85     ADD BH,30H
 86     CMP BH,3AH
 87     JB NEXT4
 88     ADD BH,07H
 89 NEXT4:  MOV DL,BH
 90     MOV AH,02H
 91     INT 21H
 92
 93     AND DH,0FH
 94     ADD DH,30H
 95     CMP DH,3AH
 96     JB NEXT3
 97     ADD DH,07H
 98 NEXT3:    ; MOV DL,AH ; coreBugZJ delete
 99     mov dl, dh  ; coreBugZJ insert
100     MOV AH, 2
101     INT 21H
102
103     AND BL,0F0H
104     MOV CL, 4
105     SHR BL,CL
106     ADD BL,30H
107     CMP BL,3AH
108     JB NEXT2
109     ADD BL,07H
110 NEXT2: MOV DL,BL
111     MOV AH, 2
112     INT 21H
113
114     pop ax ; coreBugZJ insert
115     AND AL,0FH
116     ADD AL,30H
117     CMP AL,3AH
118     JB NEXT1
119     ADD AL,07H
120 NEXT1: MOV DL,AL
121     MOV AH, 2
122     INT 21H 
123
124
125 EXIT:    MOV AH,4CH
126     INT 21H 
127 CODE ENDS
128     END START
129






你可能感兴趣的:(微机实验 MASM 汇编实现进制转换)