汇编指令 MOV BL,0
Assembly instruction MOV BL,0
我有一个关于汇编指令的问题。我不明白为什么在这个练习中指令 MOV BL,0 已经包含了实际的最大值。按照代码:
SECTION data
Vect1: db 13,15,22,7,5,3,21,2,0,10
Vect2: db 1,7,3,2,22,21,3,28,7,11
string1: db ‘ maximum is in the vector 1’,0
string2: db ‘maximum is in the vector 2’,0
SECTION text
..start:
...
FindMax:
push bp
mov bp, sp
mov si,[bp+6] ; Vect1
mov di,[bp+4] ; Vect2
mov bl,0 ; bl conteins the actual maximum ->>>WHY??
mov cx,[bp+8] ; N = 10
Loop:
mov ah,[si]
cmp ah, bl
ja NewMaximum1
LoopRef1:
inc si
mov ah,[di]
cmp ah,bl
ja NewMaximum2
LoopRef2:
inc di
loop Loop
jmp endFunc
NewMaximum1:
mov bl,ah
mov al, 0
jmp LoopRef1
NewMaximum2:
mov bl,ah
mov al, 1
jmp LoopRef2
endFunc:
pop bp
ret
提前感谢您的回答!
它使用无符号比较,0
是可能的最小无符号数。用 max=0
或 max=INT_MIN
开始一个最大查找循环是正常的,而不是加载第一个元素,因为这简化了输入为零长度的情况的处理。
如果两个数组都包含全零,这似乎有一个错误:它永远不会将 AL 设置为 0 或 1 来记录哪个数组具有最大值。但可能它只是在 AL 上分支来决定打印哪个字符串,所以你会得到一个随机的字符串,具体取决于 AL 中开始的内容。
做mov al, '1'
或mov al, '2'
效率会高很多,并且在搜索后将AL存储到字符串中的相关位置,但是你需要确保它已初始化,以防搜索循环从未在 0
.
上方找到新的最大候选者
我有一个关于汇编指令的问题。我不明白为什么在这个练习中指令 MOV BL,0 已经包含了实际的最大值。按照代码:
SECTION data
Vect1: db 13,15,22,7,5,3,21,2,0,10
Vect2: db 1,7,3,2,22,21,3,28,7,11
string1: db ‘ maximum is in the vector 1’,0
string2: db ‘maximum is in the vector 2’,0
SECTION text
..start:
...
FindMax:
push bp
mov bp, sp
mov si,[bp+6] ; Vect1
mov di,[bp+4] ; Vect2
mov bl,0 ; bl conteins the actual maximum ->>>WHY??
mov cx,[bp+8] ; N = 10
Loop:
mov ah,[si]
cmp ah, bl
ja NewMaximum1
LoopRef1:
inc si
mov ah,[di]
cmp ah,bl
ja NewMaximum2
LoopRef2:
inc di
loop Loop
jmp endFunc
NewMaximum1:
mov bl,ah
mov al, 0
jmp LoopRef1
NewMaximum2:
mov bl,ah
mov al, 1
jmp LoopRef2
endFunc:
pop bp
ret
提前感谢您的回答!
它使用无符号比较,0
是可能的最小无符号数。用 max=0
或 max=INT_MIN
开始一个最大查找循环是正常的,而不是加载第一个元素,因为这简化了输入为零长度的情况的处理。
如果两个数组都包含全零,这似乎有一个错误:它永远不会将 AL 设置为 0 或 1 来记录哪个数组具有最大值。但可能它只是在 AL 上分支来决定打印哪个字符串,所以你会得到一个随机的字符串,具体取决于 AL 中开始的内容。
做mov al, '1'
或mov al, '2'
效率会高很多,并且在搜索后将AL存储到字符串中的相关位置,但是你需要确保它已初始化,以防搜索循环从未在 0
.