博文
今天郁闷了(2007-06-12 22:30:00)
摘要:今天遇到了一个问题,一直没解决啊,很简单,就是
ret 和
mov ax,4c00h
int 21h
的区别啊,我问了很多人,他们都说是一样的只不过前者返回过程,后者是直接返回 dos
但我在做一个题时遇到问题觉得他们说的都不准确啊,请看:
DATA SEGMENT
MESG1 db 0DH,0AH,'FOUND$'
MESG2 Db 0DH,0AH,'NO FOUND$'
MESG3 Db 'ENTER KEYWORD:$'
BUFFER DW 3213,5128,57826,7632,1387
DW 45321,928,9876,1899,45678
COUNT dw 10
ADDR DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MESG3
INT 21H
CALL DECIBIN
MOV AX,BX
MOV DI,OFFSET BUFFER
MOV CX,COUNT
NEXT: CMP AX,[DI]
JE OK
ADD DI,2
LOOP NEXT
MOV ADDR,-1
 ......
堆栈的使用心的(2007-06-11 11:35:00)
摘要:请看下面的lea sp,tos这句为什么用-t指令不显示啊,但是执行执行了
stack_seg segment
dw 100 dup(?)
tos label word
stack_seg ends
code segment
main proc far
assume cs:code,ss:stack_seg
start:
mov ax,stack_seg
mov ss,ax
lea sp,tos //就是这句为什么不显示
ret
main endp
code ends
end start
在查了有关资料得出:这个是 cpu 的个保护功能的体现吧. 堆栈是由 SS 和 SP 共同指定的, 要设置完整的堆栈地址, 需要有两条指令, 如果在这两条指令间发生中断, 那么就可能导致堆栈的错误使用, 引发的后果难以预料. 因此, 一般在设置堆栈前, 早期的做法就是采用 cli 指令禁止可屏蔽类中断, 设置完成后再 sti; 后来的 cpu 籍此增加了个保险措施, 就是遇见设置堆栈的指令组时, 让它们一并执行, 中间不允许中断, 行如一条指令, 这样也是为了防止无意中漏了 cli 指令导致不良后果
哈哈哈,学习了,我也验证了,凡是跟在
mov ax,stack_seg
mov ss,ax
后的语句都不显示,和mov ss,ax一起连续执行......
debug详解(2007-06-10 09:27:00)
摘要:DEBUG是DOS中的一个外部命令,从DOS 1.0起就带有此命令,因此可见此命令的重要性了。虽然此命令的功能非常强大,可以解决许多问题,可是对许多人来说,尤其是初学者来说,却非常不易掌握。因此,现将DEBUG的命令详细介绍一番,以让大家知道它的使用。
Debug:A(汇编)
直接将 8086/8087/8088 记忆码合并到内存。
该命令从汇编语言语句创建可执行的机器码。所有数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作代码(操作码)前指定前缀记忆码。
a [address]
参数
address
指定键入汇编语言指令的位置。对 address 使用十六进制值,并键入不以“h”字符结尾的每个值。如果不指定地址,a 将在它上次停止处开始汇编。
有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的 Debug E(键入)。
有关反汇编字节的信息,请单击“相关主题”列表中的 Debug U(反汇编)。
说明
使用记忆码
段的替代记忆码为 cs:、ds:、es: 和 ss:。远程返回的记忆码是 retf。字符串处理的记忆码必须明确声明字符串大小。例如,使用 movsw 可以移动 16 位的字串,使用 movsb 可以移动 8 位字节串。
汇编跳转和调用
汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。通过使用 near 或 far 前缀可以替代这样的跳转或调用,如下例所示:
-a0100:0500
0100:0500 jmp 502 ; a 2-byte short jump
0100:0502 jmp near 505 ; a 3-byte near jump
0100:0505 jmp far 50a ; a 5-byte far jump
可以将 near 前缀缩写为 ne。
区分字和字节内存位置
当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 word ptr 或者前缀 byte ptr 指定数据类型。可接受的缩写分别是 wo 和 by。以下范例显示两种格式:
dec wo [si]
neg byte ptr [128]
指定操作数
Debug 使用包括在中括号 ([ ]) 的操作......