1、理解有无符号?
mov al,80h
add al,80h
mov al,7dh
add al,0bh
下面分析一下:
首先对于计算机来说10000001B只是一串二进制数,你可以把它看做是有符号数,也可以看做是无符号数,如果你把它看做有符号的,最高位就是符号位。
al=80h+80h=100h al只能保存8个位,高位舍去,结果为0
如看做无符号的话真实结果100h超出了8字节,产生进位,进位标志CF位置1
如看做有符号的话结果应是-128+(-128)=-256超出一个字节能表示的有符号数的范围(-128~+127),于是发生溢出,7dh+0bh=88h al能保存,结果为88h
al=7dh+0bh=88h al能保存,结果为88h
看做无符号:真实结果88h未超出8字节,不产生进位,进位标志CF位置0
看做有符号:结果应是125+11=136超出一个字节能表示的有符号数的范围,产生溢出,OF位置1
2、包含多个段的程序
assume cs:code,ds:data,ss:stack
data segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16 ;将设置栈顶ss:sp指向stack:16
mov ax,data
mov ds,ax ;ds指向data
mov bx,0 ;ds:bx指向data段中第一个单元
mov cx,8
s: push [bx]
add bx,2
loop s ;将以上代码段0-16单元中的8个字符型数据依次入栈
mov bx,0
mov cx,8
s0: pop [bx]
add bx,2
loop s0 ;以上依次出栈8个字符型数据到代码段0-16单元中
mov ax,4c00H
int 21h
code ends
end start ;指名程序的入口在start处
分析一下:
首先声明了 3个段地址 assume cs:code,ds:data,ss:stack
数据段 data segment 定义数据
栈段 stack segment 申请栈空间
代码段 code segment 执行相应的代码
主要实现吧8个字符型数据入栈出栈的功能