-
数据段
-
db和dw定义字节型数据和字型数据
assume cs:code
code segment
dw (栈,数据)
start:
;
(代码)
code ends
ends start -
将数据,代码,栈放入不同段
assume cs:code , ds:data , ss:stack data segment dw (数据地址) data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start : move ax,stack move ss,ax move sp,20h //设置栈顶ss:sp 即 stack:20h move ax,data move ds,ax // ds指向data段 move bx,0 // ds:bx 指向data段中的第一个单元 move cx,4 s:push [bx] add bx,2 loop s //将data 段中的0-7单元中的4个字型数据依次入栈 move bx,0 move cx ,8 s0: pop [bx] add bx,2 loop s0 move ax,4c00h int 21h code ends end start
-
and运算 ,同为1才为1 相当于&&
OR或运算,有一个是1就为1,否则为0 相当于||
xor 异或运算 ,不相同,则异或结果为1。相同,异或结果为0。
not 运算 ,值取反。
6. [bx+idata]可以定位数组、字符串中的值;也可以用[bx+si(或di)]或
[bx+si+idata]的方式来指明一个内存单元。(括号里的相当于偏移地址)
7. si和di是和bx功能接近的寄存器,不能被拆成两个8位寄存器。
8. 例:将datasg段中的每一个单词的头一个字母改为大写
assume cs:datasg,ds:datasg
data segment
db '1.one '
db '2.two '
db '3.three '
db '4.fore '
datasg ends
codesg segment
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s:mov al, [bx+3] // 用[bx+idata]来对目标单位寻址,提取cs:[bx+3]中的值到al
and al,11011111b //将2进制第6位改为0,即把小写字母的ascll码减32
mov [bx+3],al
add bx,16
loop s
code ends
end start