|
发表于 2012-12-22 21:36:54
|
显示全部楼层
本帖最后由 lyoal 于 2012-12-22 21:45 编辑
;首先声明,我也是菜鸟,正在学习中。
;给楼主写段代码,实现功能:判断AX中的数值与0进行比较,结果:
;如果是0,bx赋值为1,否则赋值为2
;我写的有点复杂了,多加了一个输出到显示器的功能
;楼说的与0比较,应该是十进行的0,又没有严格定义AX寄存器中值
;我这里定义了一个数据段,每比较一次就将结果输出到显示器上
;希望对楼有帮助,谢谢!
assume cs:code
data segment
db '0110101330001101' ;定义一个数据段,等一下取其中数据,进行判断
data ends
code segment
start:
;===============主程序===========================================
mov ax,data ;关联数据段
mov ds,ax
mov si,0 ;定义数据段偏移地址
mov ax,0b800h ;设置显存缓冲区
mov es,ax
mov di,160*12+32*2 ;定义显存偏移地址
sub ax,ax ;清空AX寄存器的值
mov cx,16 ;数据段中有16个字节,我这里定义一个循环次数
;============循环判断与0比较==================================
s: mov al,byte ptr [si] ;取数据段中的数据给AL
sub al,30h ;编译时,内存中是字符的16进制,这里减去30h将其转换成内存中的十进制形式与0进行比较
mov bl,0
add di,2 ;这个DI,是给显示缓冲区使用的偏移变量
cmp al,bl ;与0进行比较
je s1 ;如果大于0,就跳到S1标号处执行
jne s2 ;如果小于0,就跳到S2标号处执行
s3: inc si
loop s ;循环到下一个字符
mov ax,4c00h
int 21h
;===============子程序1============================================
s1: sub bx,bx ;将BX寄存器清一下
mov bx,1
add bx,30h
;这里我将结果显示到CMD屏幕中间
mov byte ptr es:[di],bl ;将比较的结果输出到显示器上
mov byte ptr es:[di+1],01000010b ;这里给显示的结果加个底色和前景色
jmp near ptr s3
;===============子程序2=============================================
s2: sub bx,bx ;将BX寄存器清一下
mov bx,2
add bx,30h
;这里我将结果显示到CMD屏幕中间
mov byte ptr es:[di],bl ;将比较的结果输出到显示器上
mov byte ptr es:[di+1],01000010b ;这里给显示的结果加个底色和前景色
jmp near ptr s3
code ends
end start
|
|