鱼C论坛

 找回密码
 立即注册
查看: 2197|回复: 7

求助啊 !!!!

[复制链接]
发表于 2012-12-22 20:20:10 | 显示全部楼层 |阅读模式
1鱼币
判断ax中的数,如果是0,给bx赋1,否则给bx赋2。


用汇编语言怎么写这个程序

最佳答案

查看完整内容

我写了段特傻的程序,不过应该能解决你这个问题:) 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-12-22 20:20:11 | 显示全部楼层
本帖最后由 阿飞-祁磊 于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-22 21:33:58 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-22 21:36:30 | 显示全部楼层

这个刚想得会不会简单点呢  上面写的dec cx应该不用了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-12-22 22:01:34 | 显示全部楼层
summerchencong 发表于 2012-12-22 21:36
这个刚想得会不会简单点呢  上面写的dec cx应该不用了吧

哦,是0,那我看错了,那就不应该有dec cx。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-24 23:54:15 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 20:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表