2013-10-23 219 views
1

我在汇编语言编程新手
我搜索的二进制搜索程序,发现这一点,我试图理解程序,它工作正常,但我不能明白的代码的成功部分:
什么是ADD al,'0'以及什么是mov res,al?二进制搜索

.model small 
.stack 100h 
.data 
    ARR DW 1000H,2000H,3000H,4000H,5000H,6000H 
    LEN DW ($-ARR)/2 
    KEY EQU 2000H 
    SUC DB "KEY IS FOUND AT$" 
    FAILURE DB "KEY IS NOT FOUND$" 
    RES DB "POSITION",13,10,"$" 
.CODE 
    START: 
     MOV AX,@data 
     MOV DS,AX 
     MOV BX,00   ;LOW 
     MOV DX,LEN   ;HIGH 
     MOV CX,KEY   ;KEY 
    AGAIN: 
     CMP BX,DX 
     JA FAIL 
     MOV AX,BX 
     ADD AX,DX 
     SHR AX,1 
     MOV SI,AX 
     ADD SI,SI 
     CMP CX,ARR[SI] 
     JAE BIG    
     DEC AX   
     MOV DX,AX 
     JMP AGAIN 
    BIG: 
     JE SUCCESS  
     INC AX   
     MOV BX,AX 
    JMP AGAIN 
    SUCCESS: 
     ADD AL,01 
     ADD AL,'0' 
     MOV RES,AL 
     LEA DX SUC 
     JMP DISP 
    FAIL: 
     LEA DX,FAILURE 
    DISP: 
     MOV AH,09H 
     INT 21H 
     MOV AH,4CH 
     INT 21H 
    END START 
+3

什么问题? add al,'0'是什么,或者这个指令在这个程序的上下文中起什么作用? – johnfound

+2

为什么它在这个程序中被使用?什么是mov res,al呢?它会连接还是附加infront? –

回答

2

add al, '0'转换,以便在屏幕上显示为成功的结果值,以显示它的一些1位数字为相应的ASCII码。

mov res, al将寄存器AL的值存储在变量RES的第一个字节中。只要RES指向字符串'POSITION',13,10,'$',AL的值将存储在该字符串的字符'P'的顶部,并且如果例如AL = 33h,则字符串变为'3OSITION',13,10,'$'

0
bsearch proc term:DWORD,array:DWORD,asize:DWORD 

    mov eax,array 
    mov ecx,array 
    add ecx,asize 
    @@: 
    cmp eax,ecx 
    jg not_found 
    mov edx,eax 
    add edx,ecx 
    shr edx,1 
    xchg DWORD PTR [edx],eax 
    cmp eax,term 
    xchg DWORD PTR [edx],eax 
    jg search_right 
    jl search_left 
    mov eax,edx 
    sub eax,array 
    ret 
    search_right: 
    mov ecx,edx 
    jmp @B 
    search_left: 
    mov eax,edx 
    jmp @B 
    not_found: 
    mov eax,-1 
    ret 
bsearch endp 
+1

尝试添加几行来解释为什么您认为您的答案最适合回答原始问题,谢谢。 – m4rtin