summerchencong 发表于 2012-12-22 20:20:10

求助啊 !!!!

判断ax中的数,如果是0,给bx赋1,否则给bx赋2。


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

阿飞-祁磊 发表于 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

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

summerchencong 发表于 2012-12-22 21:36:30

阿飞-祁磊 发表于 2012-12-22 21:20 static/image/common/back.gif
我写了段特傻的程序,不过应该能解决你这个问题:)

assume cs:codesg


这个刚想得会不会简单点呢上面写的dec cx应该不用了吧

lyoal 发表于 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 ;取数据段中的数据给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

阿飞-祁磊 发表于 2012-12-22 22:01:34

summerchencong 发表于 2012-12-22 21:36 static/image/common/back.gif
这个刚想得会不会简单点呢上面写的dec cx应该不用了吧

哦,是0,那我看错了,那就不应该有dec cx。

monk-half 发表于 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
页: [1]
查看完整版本: 求助啊 !!!!