将C语言修改为汇编语言

时间:2023-02-21 10:17:27
if(a>b)
 c = (a+b)*c;
else
 c = (a+c)*b;
将这个修改为汇编语言,谁能告诉一下,谢谢

9 个解决方案

#1



如果用GCC的话,可以这样:
gcc  -O1 -S -masm=intel urfile.c
这样就产生了一个Intel风格的汇编文件urfile.s

#2


?
这个是一个考试题目,我不会汇编,能帮写出来吗?

#3


挣分 将C语言修改为汇编语言

#4


??没有人帮忙吗

#5


就20分,不干

#6


引用 4 楼  的回复:
??没有人帮忙吗

.data
intA dw 3 ;a
intB dw 4 ;b
intC dw ? ;c (c的取值范围:-32768~32767)
.code
...
xor dx,dx   ;dx = 0

mov ax,intA ;ax = a
cmp ax,intB ;a > b?
jng @@else  ;if(false) goto @@else

add ax,intB ; ax = a+b
mul intC    ;dx:ax = (a+b)*c
mov intC,ax ;c = (a+b)*c
jmp @@endif

@@else:
add ax,intC ;ax = a+c
mul intB    ;dx:ax = (a+c)*b
mov intC,ax ;c = (a+c)*b

@@endif:
...
供参考

#7


引用 4 楼  的回复:
??没有人帮忙吗

楼上程序有错,修改一下:
.data
intA dw 3 ;a
intB dw 4 ;b
intC dw ? ;c (c的取值范围:0~65535)
.code
...
xor dx,dx ;dx = 0

mov ax,intA ;ax = a
cmp ax,intB ;a > b?
jng @@else ;if(false) goto @@else

add ax,intB ; ax = a+b
mul intC ;dx:ax = (a+b)*c
mov intC,ax ;c = (a+b)*c
jmp @@endif

@@else:
add ax,intC ;ax = a+c
mul intB ;dx:ax = (a+c)*b
mov intC,ax ;c = (a+c)*b

@@endif:
...
;供参考

#8


引用 4 楼  的回复:
??没有人帮忙吗

不好意思,我楼上的程序修改以后又出现错误.解决办法:如果是带符号数,将mul换成imul; 如果是无符号数,将jng换成jna

#9


引用 4 楼  的回复:
??没有人帮忙吗


如果你会写 c程序不?把这那段代码写成一个程序编译连接生成(文件名.exe)文件,存在d:,用debug反汇编一下,不得了,别说你不知道怎么用debug
——》按(windows+R)键 ——》输入 d:————》输入debug 文件名.exe

#1



如果用GCC的话,可以这样:
gcc  -O1 -S -masm=intel urfile.c
这样就产生了一个Intel风格的汇编文件urfile.s

#2


?
这个是一个考试题目,我不会汇编,能帮写出来吗?

#3


挣分 将C语言修改为汇编语言

#4


??没有人帮忙吗

#5


就20分,不干

#6


引用 4 楼  的回复:
??没有人帮忙吗

.data
intA dw 3 ;a
intB dw 4 ;b
intC dw ? ;c (c的取值范围:-32768~32767)
.code
...
xor dx,dx   ;dx = 0

mov ax,intA ;ax = a
cmp ax,intB ;a > b?
jng @@else  ;if(false) goto @@else

add ax,intB ; ax = a+b
mul intC    ;dx:ax = (a+b)*c
mov intC,ax ;c = (a+b)*c
jmp @@endif

@@else:
add ax,intC ;ax = a+c
mul intB    ;dx:ax = (a+c)*b
mov intC,ax ;c = (a+c)*b

@@endif:
...
供参考

#7


引用 4 楼  的回复:
??没有人帮忙吗

楼上程序有错,修改一下:
.data
intA dw 3 ;a
intB dw 4 ;b
intC dw ? ;c (c的取值范围:0~65535)
.code
...
xor dx,dx ;dx = 0

mov ax,intA ;ax = a
cmp ax,intB ;a > b?
jng @@else ;if(false) goto @@else

add ax,intB ; ax = a+b
mul intC ;dx:ax = (a+b)*c
mov intC,ax ;c = (a+b)*c
jmp @@endif

@@else:
add ax,intC ;ax = a+c
mul intB ;dx:ax = (a+c)*b
mov intC,ax ;c = (a+c)*b

@@endif:
...
;供参考

#8


引用 4 楼  的回复:
??没有人帮忙吗

不好意思,我楼上的程序修改以后又出现错误.解决办法:如果是带符号数,将mul换成imul; 如果是无符号数,将jng换成jna

#9


引用 4 楼  的回复:
??没有人帮忙吗


如果你会写 c程序不?把这那段代码写成一个程序编译连接生成(文件名.exe)文件,存在d:,用debug反汇编一下,不得了,别说你不知道怎么用debug
——》按(windows+R)键 ——》输入 d:————》输入debug 文件名.exe