回 帖 发 新 帖 刷新版面

主题:刚学汇编编了个程序找不出错,请帮看

这个程序是比较三个数(一定有二个相同的),把和另外两个不同的那个数的地址送到date0,如果三个都相同就把0ffffh送到date0


data   SEGMENT  use16
     a  db     12
                 b  db     12
                 c  db     5  ;;;; ;数据段:在此处添加程序所需的数据
         date0   dw    ? 
data  ENDS
stack  SEGMENT      use16  STACK 
    db  200    dup(0)       ;;; ;初始化堆栈大小为200
stack  ENDS


code  SEGMENT  use16
    assume  cs:code, ds:data, ss:stack


    
main :       ;;;;;  ;主程序入口此处添加主程序代码

    mov ax, data
    mov ds, ax
                mov al,a
                cmp al,b    ;;;a和b比较
                je  loop1   ;; ;a和b相等跳到loop1
                mov si,offset  b    ;;  ;a和b不相等把b的地址送到date0
                mov date0,si 
                jmp  exit
     loop1:
               cmp al,c       ;;;a和c比较
               je   loop2      ;; ;a和b相等跳到loop2
               mov si,offset  c
               mov date0,si
               jmp  exit 
    loop2:
              mov  bx,0ffffh
              mov date0,bx
    exit:
           mov ah,4ch
           int 21h
code   ends
       end  main

    
    

回复列表 (共6个回复)

沙发

有3个错请帮看

板凳

这段代码可以通过汇编的,tasm3.0会认为段名stack是保留字,而tasm5.0已经改过来了。不过,代码倒有一个逻辑错误,a和b不相等并不说明b就是那个不相等的数,a也有可能,还应该把a继续跟c比较。

3 楼

我修改成这样了

data   SEGMENT  use16
     a  db     12
                 b  db     12
                 c  db     5  ;;;; ;数据段:在此处添加程序所需的数据
         date0   dw    ? 
data  ENDS
stack  SEGMENT      use16  STACK 
    db  200    dup(0)       ;;; ;初始化堆栈大小为200
stack  ENDS


code  SEGMENT  use16
    assume  cs:code, ds:data, ss:stack


    
main :       ;;;;;  ;主程序入口此处添加主程序代码

    mov ax, data
    mov ds, ax
                mov al,a
                cmp al,b    ;;;a和b比较
                je  loop1   ;; ;a和b相等跳到loop1
                cmp al,c
                je   loop3
                mov si,offset  a   ;;  ;a和b不相等把b的地址送到date0
                mov date0,si 
                jmp  exit                  
     loop3: mov si,offset  b    ;;  ;a和b不相等把b的地址送到date0
                mov date0,si 
                jmp  exit
     loop1:
               cmp al,c       ;;;a和c比较
               je   loop2      ;; ;a和b相等跳到loop2
               mov si,offset  c
               mov date0,si
               jmp  exit 
    loop2:
              mov  bx,0ffffh
              mov date0,bx
    exit:
           mov ah,4ch
           int 21h
code   ends
       end  main

还有三个错这是为什么呀!
zy.asm(2): error A2025: Improper align/combine type
zy.asm(8): error A2025: Improper align/combine type
zy.asm(13): error A2025: Improper align/combine type

4 楼

我修改成这样了

data   SEGMENT  use16
     a  db     12
                 b  db     12
                 c  db     5  ;;;; ;数据段:在此处添加程序所需的数据
         date0   dw    ? 
data  ENDS
stack  SEGMENT      use16  STACK 
    db  200    dup(0)       ;;; ;初始化堆栈大小为200
stack  ENDS


code  SEGMENT  use16
    assume  cs:code, ds:data, ss:stack


    
main :       ;;;;;  ;主程序入口此处添加主程序代码

    mov ax, data
    mov ds, ax
                mov al,a
                cmp al,b    ;;;a和b比较
                je  loop1   ;; ;a和b相等跳到loop1
                cmp al,c
                je   loop3
                mov si,offset  a   ;;  ;a和b不相等把b的地址送到date0
                mov date0,si 
                jmp  exit                  
     loop3: mov si,offset  b    ;;  ;a和b不相等把b的地址送到date0
                mov date0,si 
                jmp  exit
     loop1:
               cmp al,c       ;;;a和c比较
               je   loop2      ;; ;a和b相等跳到loop2
               mov si,offset  c
               mov date0,si
               jmp  exit 
    loop2:
              mov  bx,0ffffh
              mov date0,bx
    exit:
           mov ah,4ch
           int 21h
code   ends
       end  main

还有三个错这是为什么呀!
zy.asm(2): error A2025: Improper align/combine type
zy.asm(8): error A2025: Improper align/combine type
zy.asm(13): error A2025: Improper align/combine type

5 楼

你用哪个汇编器?

6 楼

谢谢你了
老师叫我去掉use16就得了
我现地想用输入的方式输入这三个数你能不能给我个输入这三个数的语句
我不知道用哪个
谢谢了

我来回复

您尚未登录,请登录后再回复。点此登录或注册