汇编中循环的问题,麻烦各位指点一下
时间:2011-04-24
来源:互联网
题目:
按15*16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符.每16个字符为一行,每行中相邻两个字符之间用空白符(ASCII码为0)隔开
datarea segment
datarea ends
prognam segment
main proc far
assume cs:prognam, ds:datarea, es:datarea
start: ;starting execution address
;set up stack for return
push ds
sub ax, ax
push ax
;set DS register to current data segment
mov ax, datarea
mov ds, ax
mov es, ax
;MAIN PART OF PROGRAM GOES HERE
mov dl, 10h
mov cx, 20h
mov ax, 101h
print:mov ah, 02h
int 21h
inc dl
push dx ;输出空格
mov dl, 0h
mov ah, 02h
int 21h
pop dx
dec cx
loop print
push dx ;输出换行回车
mov dx, 0Ah
mov ah, 02h
int 21h
mov dx, 0Dh
mov ah, 02h
int 21h
pop dx
cmp dx, ax ;前面都没问题,能显示一行和换行,只是加上这两行后
jnz print ;是死循环,这是怎么一回事呢
ret ;return to DOS
main endp ;end of main part of program
;---------------------------------------------------------------------
prognam ends ;end of code segment
;*********************************************************************
end start ;end assembly
按15*16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符.每16个字符为一行,每行中相邻两个字符之间用空白符(ASCII码为0)隔开
datarea segment
datarea ends
prognam segment
main proc far
assume cs:prognam, ds:datarea, es:datarea
start: ;starting execution address
;set up stack for return
push ds
sub ax, ax
push ax
;set DS register to current data segment
mov ax, datarea
mov ds, ax
mov es, ax
;MAIN PART OF PROGRAM GOES HERE
mov dl, 10h
mov cx, 20h
mov ax, 101h
print:mov ah, 02h
int 21h
inc dl
push dx ;输出空格
mov dl, 0h
mov ah, 02h
int 21h
pop dx
dec cx
loop print
push dx ;输出换行回车
mov dx, 0Ah
mov ah, 02h
int 21h
mov dx, 0Dh
mov ah, 02h
int 21h
pop dx
cmp dx, ax ;前面都没问题,能显示一行和换行,只是加上这两行后
jnz print ;是死循环,这是怎么一回事呢
ret ;return to DOS
main endp ;end of main part of program
;---------------------------------------------------------------------
prognam ends ;end of code segment
;*********************************************************************
end start ;end assembly
作者: udbwcso 发布时间: 2011-04-24
cmp dx, ax ;前面都没问题,能显示一行和换行,只是加上这两行后
jnz print ;是死循环,这是怎么一回事呢
jnz表示不为0则跳转,这里逻辑错误.
dx与ax做比较,大于,小于,等于...等情形判断,而不是用jnz(很可能成死循环)
可以参考以下:
JE ;等于则跳转
JNE ;不等于则跳转
JZ ;为 0 则跳转
JNZ ;不为 0 则跳转
JS ;为负则跳转
JNS ;不为负则跳转
JC ;进位则跳转
JNC ;不进位则跳转
JO ;溢出则跳转
JNO ;不溢出则跳转
JA ;无符号大于则跳转
JNA ;无符号不大于则跳转
JAE ;无符号大于等于则跳转
JNAE ;无符号不大于等于则跳转
JG ;有符号大于则跳转
JNG ;有符号不大于则跳转
JGE ;有符号大于等于则跳转
JNGE ;有符号不大于等于则跳转
JB ;无符号小于则跳转
JNB ;无符号不小于则跳转
JBE ;无符号小于等于则跳转
JNBE ;无符号不小于等于则跳转
JL ;有符号小于则跳转
JNL ;有符号不小于则跳转
JLE ;有符号小于等于则跳转
JNLE ;有符号不小于等于则跳转
jnz print ;是死循环,这是怎么一回事呢
jnz表示不为0则跳转,这里逻辑错误.
dx与ax做比较,大于,小于,等于...等情形判断,而不是用jnz(很可能成死循环)
可以参考以下:
JE ;等于则跳转
JNE ;不等于则跳转
JZ ;为 0 则跳转
JNZ ;不为 0 则跳转
JS ;为负则跳转
JNS ;不为负则跳转
JC ;进位则跳转
JNC ;不进位则跳转
JO ;溢出则跳转
JNO ;不溢出则跳转
JA ;无符号大于则跳转
JNA ;无符号不大于则跳转
JAE ;无符号大于等于则跳转
JNAE ;无符号不大于等于则跳转
JG ;有符号大于则跳转
JNG ;有符号不大于则跳转
JGE ;有符号大于等于则跳转
JNGE ;有符号不大于等于则跳转
JB ;无符号小于则跳转
JNB ;无符号不小于则跳转
JBE ;无符号小于等于则跳转
JNBE ;无符号不小于等于则跳转
JL ;有符号小于则跳转
JNL ;有符号不小于则跳转
JLE ;有符号小于等于则跳转
JNLE ;有符号不小于等于则跳转
作者: G_Spider 发布时间: 2011-04-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28