汇编程序运行出错
时间:2011-11-24
来源:互联网
DATAS SEGMENT
x dw ?
array_head dw 3,5,15,23,37,49,52,65,78,99
array_end dw 105
n dw 32
DATAS ENDS
CODES SEGMENT
main proc far
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,datas
mov ds,ax
mov cx,11
call print
mov ax,n
mov x,0ffffh
mov si,0
compare:
cmp array_end[si],ax
jle insert
mov bx,array_end[si]
mov array_end[si+2],bx
sub si,2
jmp short compare
insert:
mov array_end[si+2],ax
mov cx,12
call print
ret
main endp
print proc near
pop cx
push ax
push dx
push si
mov si,0
again:
mov ax,array_head[si]
mov dl,10
div dl
add al,30h
add ah,30h
mov dh,ah
mov dl,al
mov ah,2
int 21h
mov al,dh
mov dl,al
mov ah,2
int 21h
mov dl,08h
mov ah,2
int 21h
add si,2
loop again
pop si
pop dx
pop ax
ret
print endp
CODES ENDS
END START
x dw ?
array_head dw 3,5,15,23,37,49,52,65,78,99
array_end dw 105
n dw 32
DATAS ENDS
CODES SEGMENT
main proc far
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,datas
mov ds,ax
mov cx,11
call print
mov ax,n
mov x,0ffffh
mov si,0
compare:
cmp array_end[si],ax
jle insert
mov bx,array_end[si]
mov array_end[si+2],bx
sub si,2
jmp short compare
insert:
mov array_end[si+2],ax
mov cx,12
call print
ret
main endp
print proc near
pop cx
push ax
push dx
push si
mov si,0
again:
mov ax,array_head[si]
mov dl,10
div dl
add al,30h
add ah,30h
mov dh,ah
mov dl,al
mov ah,2
int 21h
mov al,dh
mov dl,al
mov ah,2
int 21h
mov dl,08h
mov ah,2
int 21h
add si,2
loop again
pop si
pop dx
pop ax
ret
print endp
CODES ENDS
END START
作者: nmvbxcz 发布时间: 2011-11-24
引用楼主 nmvbxcz 的回复:
DATAS SEGMENT
x dw ?
array_head dw 3,5,15,23,37,49,52,65,78,99
array_end dw 105
n dw 32
DATAS ENDS
CODES SEGMENT
main proc far
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
……
DATAS SEGMENT
x dw ?
array_head dw 3,5,15,23,37,49,52,65,78,99
array_end dw 105
n dw 32
DATAS ENDS
CODES SEGMENT
main proc far
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
……
Assembly code
DATAS SEGMENT x dw ? array_head dw 3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32 DATAS ENDS CODES SEGMENT main proc far ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX mov ax,datas ;mov ds,ax 多余 mov es,ax mov cx,11 call print mov ax,n mov x,0ffffh mov si,0 compare: cmp array_end[si],ax jle insert ;?是有符号数吗? mov bx,array_end[si] mov array_end[si+2],bx sub si,2 jmp short compare ;本循环什么情况下结束? insert: mov array_end[si+2],ax mov cx,12 call print ret main endp print proc near pop cx ;你在call时没有push参数 ;但这里来个pop,你把压栈的IP弹出来给CX了 push ax push dx push si mov si,0 again: mov ax,array_head[si] mov dl,10 div dl add al,30h ;商加外套? add ah,30h ;余数加外套 mov dh,ah mov dl,al ;显示商? mov ah,2 int 21h mov al,dh ;显示余数? mov dl,al mov ah,2 int 21h mov dl,08h ;退格? mov ah,2 int 21h add si,2 loop again pop si pop dx pop ax ret print endp CODES ENDS END START
作者: gsy999 发布时间: 2011-11-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28