5.汇编之进制,Loop,段前缀

2018-05-03  本文已影响0人  听木子说心语

1.进制

负数-正数

计算机数据存储它会分为有符号数和无符号数
上图中,

有符号数:
正数: 0 1 2 3 4 5 6 7
负数: F E D B C A 9 8
    -1 -2 -3 -4 -5 -6 -7 -8

8进制加法表

1+1 = 2                     
1+2 = 3   2+2 = 4               
1+3 = 4   2+3 = 5   3+3 = 6
1+4 = 5   2+4 = 6   3+4 = 7   4+4 = 10  
1+5 = 6   2+5 = 7   3+5 = 10  4+5 = 11  5+5 = 12
1+6 = 7   2+6 = 10  3+6 = 11  4+6 = 12  5+6 = 13  6+6 = 14
1+7 = 10  2+7 = 11  3+7 = 12  4+7 = 13  5+7 = 14  6+7 = 15  7+7 = 16

加法表有没有和我们小时候被的乘法表很相似,有没有勾起你儿时的回忆~~

8进制乘法表

1*1 = 1                     
1*2 = 2   2*2 = 4               
1*3 = 3   2*3 = 6   3*3 = 11    
1*4 = 4   2*4 = 10  3*4 = 14  4*4 = 20
1*5 = 5   2*5 = 12  3*5 = 17  4*5 = 24  5*5 = 31
1*6 = 6   2*6 = 14  3*6 = 22  4*6 = 30  5*6 = 36  6*6 = 44
1*7 = 7   2*7 = 16  3*7 = 25  4*7 = 34  5*7 = 43  6*7 = 52  7*7 = 61

案例(8进制计算)

2 + 4 = ? 6
2 * 4 = ? 10
4 + 6 = ? 12
4 * 6 = ? 30
222 + 333 = ? 555
234 * 54 = ? 15320
234 * 54
234 - 54 = ? 160
234 / 4 = ? 47

2. Loop

       mov  cx,循环次数
标号:
       循环执行的程序段
       loop 标号
assume cs:code

code segment

     mov ax,2
     add ax,ax
     ;退出程序
     mov ah,4c00h
     int 21h

code ends

end

案例二:
编程计算2^3
分析:2 ^3 = 2 * 2 * 2,若设(ax)=(ax) * 2 * 2,最后(ax)中的2^3的值.

assume cs:code
code segment
       mov ax,2
       add  ax,ax
       add  ax,ax   
       ;退出程序
       mov ah,4c00h
       int 21h
code ends
end

案例三:
编程计算2 ^ 6
分析:2^6 = 2 * 2 * 2 * 2 * 2 * 2,若设(ax)=(ax) * 2 * 2 * 2 * 2 * 2

assume cs:code
code segment

        mov ax,2
        add ax,ax
        add ax,ax
        add ax,ax
        add ax,ax
        add ax,ax
code ends
end

案例四:
如果我们循环上千次,我们要写999次循环,
那样的话,写起来会麻烦,
我们简化一下上面的代码吧

assume cs:code
code segment
     mov ax,2
     mov cx,5
s: 
     add ax,ax
     loop s
code ends
end

我们分析一下案例四,

3.段前缀

3.2 段前缀的使用
段前缀使用分析
assume cs:code
code segment 
     mov  bx,0   ;(bx)=0,偏移地址从0开始
     mov cx,12   ;(cx)=12,循环12次
s: 
     mov ax,0ffffh
     mov ds,ax    ;(ds)=offffh
     mov dl,[bx]  ; (dl)=((ds)* 16 +(bx)),将ffff:bx中的数据传入dl
     mov ax,0020h
     mov ds,ax  ;(ds)=0020h
     mov [bx],dl  ;((ds)*16+(bx))=(dl),将dl的数据送入0020:bx
     inc bx  ;(bx)=(bx)+1
     loop s
     mov ax,4c00h  ;退出程序
     int 21h
code ends
end
assume cs:code
code segment
     mov ax,offffh
     mov ds,ax   ;(ds)=offffh
     mov ax,0020h
     mov es,ax   ;(es)=0020h
     mov bx,0  ;(bx)=0,此时ds:bx指向ffff:0,es:bx指向0020:0
     mov cx,12  ; (cx)=12,循环12次
s:
    mov dl,[bx]   ;(dl)=((ds)*16 +(bx)),将ffff:bx中的数据送入dl
    mov es:[bx],dl  ;((es)* 16 +(bx))=(dl),将dl中的数据送入0020:bx
    inc bx  ;(bx)=(bx)+1
    loop s
    mov ax,4c00h  ;退出程序
    int 21h
code ends
end

待续中...

上一篇 下一篇

猜你喜欢

热点阅读