求助啊 !!!!
判断ax中的数,如果是0,给bx赋1,否则给bx赋2。用汇编语言怎么写这个程序
本帖最后由 阿飞-祁磊 于 2012-12-22 22:03 编辑
我写了段特傻的程序,不过应该能解决你这个问题:)
assume cs:codesg
codesg segment
mov cx,ax
dec cx ;不要这句。。
jcxz s
mov bx,2
jmp short s0
s:mov bx,1
s0: mov ax,4c00h
int 21h
codesg ends
end assume cs:codesg
codesg segment
mov cx,ax
inc cx
mov bx,2
loop s
mov bx,1
s: mov ax,4c00h
int 21h
codesg ends
end 阿飞-祁磊 发表于 2012-12-22 21:20 static/image/common/back.gif
我写了段特傻的程序,不过应该能解决你这个问题:)
assume cs:codesg
这个刚想得会不会简单点呢上面写的dec cx应该不用了吧 本帖最后由 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 ;取数据段中的数据给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:,bl ;将比较的结果输出到显示器上
mov byte ptr es:,01000010b ;这里给显示的结果加个底色和前景色
jmp near ptr s3
;===============子程序2=============================================
s2:sub bx,bx ;将BX寄存器清一下
mov bx,2
add bx,30h
;这里我将结果显示到CMD屏幕中间
mov byte ptr es:,bl ;将比较的结果输出到显示器上
mov byte ptr es:,01000010b ;这里给显示的结果加个底色和前景色
jmp near ptr s3
code ends
end start
summerchencong 发表于 2012-12-22 21:36 static/image/common/back.gif
这个刚想得会不会简单点呢上面写的dec cx应该不用了吧
哦,是0,那我看错了,那就不应该有dec cx。 assume cs:code
code segment
start:
cmp ax, 0
je s0
mov bx, 2
s1:mov ax, 4c00h
int 21h
s0:mov bx, 1
jmp s1
code ends
end start
页:
[1]