x86汇编学习-使用条件跳转指令完成循环计算-17

165 阅读1分钟

使用条件跳转指令计算1+2+3+...+100

jmp start
data '1+2+3+...+100='
start:
    mov ax, 0x07c0
    mov ds, ax
    mov ax, 0xb800
    mov es, ax
    mov si, data
    mov di, 0
    mov cx, start-data
print:
    mov al, [si]
    mov [es:di], al
    inc di
    mov [es:di], 0x07
    inc di
    inc si
    loop print
xor ax, ax
mov cx, 1
sum:
    add ax, cx
    inc cx
    cmp cx, 100
    jle sum
jmp $
times 510-($-$$) db 0
db 0x55,0xaa

cmp指令和jle指令

  • cmp 内存空间/寄存器,内存空间/寄存器/立即数
    类似sub指令减法操作 但是不改变cmp的两个操作数 根据减法的结果设置CF/OF/SF/ZF/AF/PF标志位
  • jle(jump if less or equal 小于等于)
    用于有符号数的比较
    ZF=1(两个数相同 相减结果为0)
等价代码
sum:
    ax += cx;
    cx ++;
    if(cx <= 100)
    {
        goto sum;
    }