自己写的一个汇编程序,求高手帮忙改错

[复制链接]
查看11 | 回复5 | 2021-1-27 06:05:17 | 显示全部楼层 |阅读模式
是对输入的字数据插入排序并输出
DATASEGMENT
ARRAYDW40DUP(0)
Adb4,?,4dup(?)
NDW1DUP(0)
DATAENDS
CODESEGMENT
ASSUMEDS:DATA,CS:CODE
START:MOVAX,DATA
MOVDS,AX
MOVN,20
movdx,offsetA
movah,0ah
int21h
movah,2
movdl,10
int21h
movdl,13
int21h
movdi,offsetA+2
movcl,A+1
movch,0
movax,0
lp0:
movbx,10
mulbx
movbl,[di]
subbl,30h
movbh,0
addax,bx
incdi
looplp0
MOVBX,offsetARRAY
MOVSI,0
MOV[BX+SI],AX
STEP1:movdx,offsetA
movah,0ah
int21h
movah,2
movdl,10
int21h
movdl,13
int21h
movdi,offsetA+2
movcl,A+1
movch,0
movax,0
lp1:
movbx,10
mulbx
movbl,[di]
subbl,30h
movbh,0
addax,bx
incdi
looplp1
ADDSI,2
CMPSI,N
JAEOP1
CMPAX,0
JEOP1
MOVDI,SI
MOVDX,AX
STEP2:SUBDI,2
CMPDI,0
JBEINSERT
CMPDX,[BX+DI]
JAEINSERT
MOVCX,[BX+DI]
MOV[BX+DI+2],CX
JMPSTEP2
INSERT:MOV[BX+DI+2],DX
JMPSTEP1
OP1:MOVN,SI
MOVSI,0
OP2:MOVDI,OFFSETA
MOVAX,[BX+SI]
ADDSI,2
L1:MOVBX,10
DIVBX
MOV[DI],DX
INCDI
CMPAX,0
JNEL1
L2:MOVAX,OFFSETA
MOVDX,[DI]
ADDDX,30H
MOVAH,02H
INT21H
DECDI
CMPAX,DI
JNEL2
movah,2
movdl,20h
int21h
CMPSI,N
JAEEXIT
JMPOP2
EXIT:MOVAH,4CH
INT21H
CODEENDS
ENDSTART
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
你先把流程整清楚,然后看出错行。
回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
...
movah,0ah;改成:movah,1h
int21h
...

回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
引用1楼的回复:你先把流程整清楚,然后看出错行。
额,用debug调试还是不知道哪里错了
回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
引用2楼的回复:...
movah,0ah;改成:movah,1h
int21h
...

movah,01h只能输入一个字符啊
要把输入的字符串转换成十进制数
回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
引用4楼的回复:引用2楼的回复:
movah,01h只能输入一个字符啊
要把输入的字符串转换成十进制数

这需要编写一个将数字字符串转换成二进制的子程序,如下:
;在数据段里定义一个buf
;转换结果在AX中
inputproc
movdx,offsetbuf
movah,10
int21h
xorcx,cx
movcl,buf+1
movbx,offsetbuf+2
movax,0
inp:
movdx,10
muldx
andbyteptr[bx],0fh
addal,[bx]
adcah,0
incbx
loopinp
ret
inputendp
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行