|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不正常人类 于 2012-10-4 21:52 编辑
- assume cs:code,ds:data
- data segment
- a db 0dh,0ah,'我很疑惑为什么在用红色标记处,要使用栈先把数据保护起来,我单步调试了一下,如果这里不用栈暂存ax的话,执行了红色之间的代码后,
- 会让al发生改变,但是上面绿色标记的dos中断执行后,却不会改变al的值,
- 按照正常来说,执行此中断是不会改变al的值,因为dos的9号中断不带有返回值,只是显示一个字符串!
- 另外这个程序的目的是显示:20h到7fh的字符
- 要求:显示6行 每行16个字符,字符之间有空格隔开
- 我试了下,如果不用栈,结果会错
- 正确结果是:(由于大小不一,所以有点错乱 但运行出来,显示是对称的)
- ! " # $ % & ' ( ) * + , - . /
- 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
- @ A B C D E F G H I J K L M N O
- P Q R S T U V W X Y Z [ \ ] ^ _
- ` a b c d e f g h i j k l m n o
- p q r s t u v w x y z { | } ~ ⌂
- data ends
- code segment
- start:
- mov ax,data
- mov ds,ax
- mov bh,6
- mov al,20h
- s: mov bl,16
- s1: mov dl,al
- mov ah,2
- int 21h
- push ax
- mov dl,20h
- mov ah,2
- int 21h
- pop ax
- inc al
- dec bl
- jnz s1
- push ax
- lea dx,a
- mov ah,9
- int 21h
- pop ax
- dec bh
- jnz s
- mov ax,4c00h
- int 21h
- code ends
- end start
复制代码 我很疑惑为什么在用红色标记处,要使用栈先把数据保护起来,我单步调试了一下,如果这里不用栈暂存ax的话,执行了红色之间的代码后,
会让al发生改变,但是上面绿色标记的dos中断执行后,却不会改变al的值,
按照正常来说,执行此中断是不会改变al的值,因为dos的9号中断不带有返回值,只是显示一个字符串!
另外这个程序的目的是显示:20h到7fh的字符
要求:显示6行 每行16个字符,字符之间有空格隔开
我试了下,如果不用栈,结果会错
正确结果是:(由于大小不一,所以有点错乱 但运行出来,显示是对称的)
! " # $ % & ' ( ) * + , - . /
0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O
P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o
p q r s t u v w x y z { | } ~ ⌂
|
|