mov ax , [bx] ; 將一個內存單元的內容送入 ax , 這個內存單元的長度爲 2字節(字單元),存放一個字,偏移地址在 bx 中,段地址在 ds 中。 |
mov al , [bx] ; 將一個內存單元的內容送入 ax , 這個內存單元的長度爲 1字節(字節單元),存放一個字節,偏移地址在 bx 中,段地址在 ds 中。 |
eg:mov ax , [idata] 表明 mov ax , [1] 、mov ax , [2] 、mov ax , [3] ... mov bx , idata mov ds , idata 非法指令 |
計算2^12次方 assume cs:code code segment mov ax , 2 mov cx , 11 s: add ax , ax loop s mov ax , 4c00h int 21h code ends end |
mov ax , 2000h ; 將 ds:bx 單元中的數據送入 al mov ds , ax mov bx , 0 mov al , [bx] ;將 2000h:0 處的值到al中 \ mov al , [0] 在debug中和上面做用同樣,masm中就是把0放到al中 mov al , ds:[0] ; [0] 前顯示給出段地址所在寄存器 |
要將字節單元(8位)數據累加到一個16位寄存器的方法,先把這個8位數據放到一個16位寄存器的低8位,高8位置0,最後在累加到16位的寄存器。 mov ax , ffffh mov ds , ax mov dx , 0 ; 初始化累加器 mov al , ds:[0] ; 8位字節單元數據放到ax的低8位 mov ah , 0 ;高8位置0 add dx , ax |
將內存 ffff:0~ffff:b 單元中的數據拷貝到 0:200~0:20b 單元中: assume cs:code code segment mov bx , 0 mov cx , 12 s: mov ax , ffffh mov ds , ax mov dl , [bx] mov ax , 0020h mov ds , ax mov [bx] , dl inc bx loop s mov ax , 4c00h int 21h code ends end 最直接的作法,可是每次都兩次設置 ds |
改進: assume cs:code code segment mov ax , ffffh mov ds , ax mov ax , 0020 mov es , ax ;用附加段寄存器存放另外一個段地址 mov bx , 0 mov cx , 12 s: mov dl , [bx] mov es:[bx] , dl inc bx loop s mov ax , 4c00h int 21h code ends end masm 編譯器[idata]以前要顯示給出段地址所在寄存器 |