【发布时间】:2019-11-17 16:53:56
【问题描述】:
我在 8086 汇编方面没有太多经验,我想知道如果你不写起始标签 (start:) 和该标签的结尾,程序会发生什么
(end start )(围绕执行代码的标签)?
所以我的问题是这些标签是执行所必需的,当这些标签被排除时,代码是否会访问一些不应该访问的地址,以及围绕执行代码的这些标签是否与 start(=='{' ) 和 main() 在 java 类中的结尾(=='}')?
*其他信息和结果
我正在编写一个程序来打印包含在数组中的数字 1-5。我尝试了添加和不添加标签,结果如下:
;assembly for printing an array of the integers 1-5
;data segment
data segment
NIZA db 1,2,3,4,5
ends
;code segment
code segment
start: ;the "start:" label
;setting ds and es
mov ax,data
mov ds,ax
mov es,ax
mov bx,OFFSET NIZA
mov cx,5
pecatenje_na_niza:
mov dl,[bx]
add dx,48d
mov ah,2
int 21h
inc bx
loop pecatenje_na_niza
mov ah,1
int 21h
mov ah,4ch
int 21h
end start ;the "end start" label
ends
1) start: 和 end start 包括:
- 程序按预期运行,输出是打印的数组的所有元素。
2) 不包括start: 和end start(相同的代码,但不包括标签):
当程序启动时,执行的这几行代码不在我包含
start:和end start的行中:
(我找不到从模拟器复制的方法,所以我要粘贴截图)
以下是执行这行代码之前和之后模拟器中的数组 NIZA 的值:
最后输出全为零。
打印是因为add dx,48d这一行,所以它打印的都是00000。顺便说一句,DX 每次mov dl,[bx] 执行时都会重置。
这就是我现在能理解和找到的全部内容。
【问题讨论】: