用汇编语言编写y={x(x<1); 2x-1(1<x<10); 3x-11(x>10),实现输入x值,输出y值。

作者&投稿:员舒 (若有异议请与网页底部的电邮联系)
用汇编语言编写y={x(x<1); 2x-1(1<=x<10); 3x-11(x>=10),实现输入x值,输出y值.~

;将X,Y均当作有符号数处理,若要当作无符号数处理还要简单些
CRLF macro ;实现回车换行的宏定义
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
endm



stack segment
dw 128 dup(0)
stack ends


code segmentstart:
call input_num ;输入x
cmp ax,1 ;根据x的值确定y的值放于BX中
jge next1
mov bx,ax
jmp disp_res
next1:cmp ax,10
jge next2
sal ax,1
sub ax,1
mov bx,ax
jmp disp_res
next2:mov bx,ax
sal ax,1
add bx,ax
sub bx,11
disp_res:CRLF ;回车换行
call disp_num ;显示放于BX中的y

mov ax, 4c00h .
int 21h

input_num proc ;输入-32768-32768之间的有符号数,通过AX返回
push bx
push cx
push dx
push si
mov cx,10
xor bx,bx
xor si,si
next_chr: mov ah,01h
int 21h
cmp al,0dh ;回车则结束
je ok
cmp al,'-'
jne is_dig ;是负数则将SI置1
mov si,1
jmp next_chr
is_dig:
cmp al,'0'
jb no_dig
cmp al,'9'
ja no_dig
and al,0fh
xor ah,ah
xchg bx,ax
mul cx
add bx,ax
jmp next_chr
no_dig: ;非数字则自动将其删除
mov ah,02h
mov dl,08h ;退格键
int 21h
mov dl,' '
int 21h
jmp next_chr
ok: mov ax,bx
cmp si,1
jne disp_ret
neg ax
disp_ret:
pop si
pop dx
pop cx
pop bx
ret
input_num endp


disp_num proc ;以十进制数形式显示来自BX中的16位有符号数
push ax
push cx
push dx
mov ax,bx
mov bx,10
xor cx,cx
xor si,si
cmp ax,0
je disp_0 ;为0则转
jg disp_next ;正数则转
neg ax ;是负数,则取其绝对值并显示'-'
push ax
mov dl,'-'
mov ah,02h
int 21h
pop ax
disp_next:
xor dx,dx ;依次分离待转换数的个十百千万位并转换成ASCII码后放入堆栈
div bx
or dl,30h
push dx
inc cx
cmp ax,0
jne disp_next
disp_asc:
mov ah,02h ;以十进制数字显示
pop dx
int 21h
loop disp_asc
jmp disp_ok
disp_0:
mov ah,02h ;待显示数为0时显示0
mov dl,'0'
int 21h
disp_ok:
pop dx
pop cx
pop ax
ret


disp_num endp
code ends
end start

#include
void main()
{int x,y;
scanf("%d",&x);
if(x<1) y=x;
if(x=1) y=2*x-1;
if(x>=10) y=3*x-11;
printf("y=%d
",y);
}

首先,这题目别人已经问过了,很明显楼主没有去找过。
其次,既然别人问过了,那我就直接拷过来给你吧。
第三,该程序我还没验证过,希望你自己验证一下。

以下为 做而论道 同志的答案! 如果有问题可以追问,或者求助于他。
;----------------------------------------------
;从键盘输入 x (0 ~ 65535),以回车结束
;求 y,将结果在屏幕上显示出来。
;----------------------------------------------
DISP_STR MACRO X ;宏定义
MOV DX, OFFSET X
MOV AH, 9
INT 21H
ENDM
;----------------------------------------------
DATA SEGMENT ;数据段.
MSG0 DB 'y = x (x < 1)', 13, 10
DB 'y = 2x - 1 (1 <= x < 10)', 13, 10
DB 'y = 3x - 11 (x >= 10)', 13, 10
MSG1 DB 13, 10, 'Input x(0 ~ 65535): $'
MSG2 DB 13, 10, 'I can not count so much ! $'
MSG3 DB 13, 10, 'The y is : $'
x DW ? ;存放输入数据.
y DW ? ;
DATA ENDS
;----------------------------------------------
CODE SEGMENT ;代码段.
ASSUME CS: CODE, DS: DATA
START:
MOV AX, DATA
MOV DS, AX
;--------------------------------
DISP_STR MSG0 ;宏调用,提示 Please Input :
MOV y, 0 ;和 清零.
;--------------------------------
IN_LOOP:
MOV x, 0 ;数据清零.
_INX:
MOV AH, 1 ;输入字符.
INT 21H
CMP AL, 13 ;回车?
JZ _Y ;全部数字结束.
CMP AL, 30H
JB _IN_ERR ;小于'0',输入错误.
CMP AL, 3AH
JNB _IN_ERR ;大于'9',输入错误.
;--------------------------------
SUB AL, 30H
MOV AH, 0
MOV CX, AX
MOV AX, x
MOV BX, 10 ;老数据乘以10
MUL BX
AND DX, DX
JNZ _IN_ERR ;输入过大,错误.
ADD AX, CX ;加上新数据.
JC _IN_ERR
MOV x, AX ;保存.
JMP _INX ;继续输入.
;--------------------------------
_Y:
MOV AX, x ;完整的数据.
CMP AX, 0 ;= 0 ?
JNE DY0
MOV y, AX ;保存.
JMP _END
DY0:
CMP AX, 10
JNB DY10
ADD AX, AX
JC _IN_ERR
SUB AX, 1
MOV y, AX ;保存.
JMP _END
DY10:
MOV BX, AX
ADD AX, BX
JC _IN_ERR
ADD AX, BX
JC _IN_ERR
SUB AX, 11
MOV y, AX ;保存.
;--------------------------------
_END:
DISP_STR MSG3 ;宏调用,提示 The y is :
MOV AX, y
CALL PRINTAX ;显示
JMP EXIT
;--------------------------------
_IN_ERR:
DISP_STR MSG2 ;宏调用,提示 can not count so much !
EXIT:
MOV AH, 4CH
INT 21H
;--------------------------------
PRINTAX PROC
MOV BX, 10
OR AX, AX
JZ _0_
LOOP_P:
XOR DX, DX
DIV BX
MOV CX, AX ;商.
OR CX, DX
JZ _E_
PUSH DX
CALL LOOP_P ;递归.
POP DX
ADD DL, '0'
JMP _1_
_0_:MOV DL, '0'
_1_:MOV AH, 2
INT 21H
_E_:RET
PRINTAX ENDP
;------------------------------
CODE ENDS
END START
;==============================================


汇编语言检测鼠标右键是否被按下了
鼠标右键被按下信息框(“鼠标右键按下”,#信息)。先注册Y键,利用_标签1_反馈事件下面的这句代码来判断:如果真(参数一=Y)这句代码的意思是如果按下的是Y键就执行下面的代码,我打个比方如果想让人按了Y键,就可以载人窗口1。

汇编语言编程 编程序,实现y=10*x 谢谢
采纳率:45% 来自:芝麻团 擅长: 硬件 操作系统\/系统故障 汇编语言 C\/C++ 软件开发 其他回答 什么意思,完全不明白,实现y=10*x也太抽象了吧,其他要求没有了?乘法直接不是用乘法的指令就能完成了么 追问 额,我是完全不懂的 ,再简单你也写下,谢谢了 追答 用MUL指令就是乘法,具体我也记不清了,我学过的...

简单的单片机的汇编语言编程的程序翻译
ORG 000H \/\/程序从内存地址000h开始执行 MOV P1,#0FFH \/\/将P1,P3置高 MOV P3,#0FFH \/\/如果P3没有置高,读取p3.0的值将会不准确 XH: JB P3.0,$ \/\/判断p3.0是否为低,若为高等待,为低继续往下执行,也就是键盘是否按下 ACALL DELAY \/\/调用延时子程序,键盘消抖 JB...

汇编语言编程实现求S=(X^2+Y^2)\/Z的值,并将结果存入RESULT单元中。设X...
X DATA 30H Y DATA 31H Z DATA 32H S DATA 33H RESULT DATA 34H MOV X,#03H MOV Y,#0AH; Y=10 MOV Z,#07H; Z=7 MOV A,X MOV B,X MUL AB; S=X^2 MOV S,A MOV A,Y MOV B,Y MUL AB; Y^2 ADDC A,S; S=X^2+Y^2 MOV B,Z DIV AB DA A MO...

用汇编语言求一个数的平方值
MOV DPTR,#SQTAB ;DPTR取得数据表的首地址 MOVC A,@A+DPTR ;查表,取平方值送累加器A MOV 31H,A ;存结果 SJMP SQTAB: DB 0,1,4,9,16,25,36,49,64,81 ;定义平方表 END 也都是在网上找的,自己学过,但是也忘了点 利用查表的方法编写Y= X2 (X=0,...

汇编语言数据定义问题,急急急!!!
意思是给首地址从“H”标号开始,分别填入:‘X’,‘Y’,‘25h’,后面是44个0

利用MasmSetup汇编语言计算 X+Y+Z=?(X,Y,Z 为 16 位二制数)
见截图。

汇编语言程序设计题
; 功能:键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回; 入口:无; 出口:若输入的是'y',进位标志置位;若输入的是'n',进位标志复位。Yes_or_No proc Near push dx push ax@@Input_Chr: mov ah,7 ;不带回显的键盘输入 int 21h mov dl,al and al,0dfh cmp al,'Y' jnz $+...

用汇编语言编写一个小小程序
这个还不简单#include<stdio.h>void main(){ float a,b,c,s;\/*定义数据类型,数据初始化*\/s=(a*b+c)\/a;\/*计算并把计算结果赋值给s*\/printf("s=%f\\n",s);\/*输出计算结果*\/}

用汇编语言编写一个简单程序
1.计算U=(X+(Y*Z-100))\/W 其中:X,Y,Z,W均为十六位有符号数。程序如下:DATA SEGMENT X DW 10 ;16位变量 Y DW 20 Z DW 30 W DW 40 U DW ?,?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,Y IMUL Z ;计算Y*Z,内容放在DX...

龙口市15911033106: 编程实现计算下式:Y=X;X>=0时,Y=|X|;X<0时 汇编语言 -
巢苑罗汉: http://zhidao.baidu.com/link?url=J5R13KcDo4pQXr0fdJ-TFUDZbI65dfGvotXwqM-stYN7IPlJSyHNo2y2Lz6EIdWmw5N0T9Lc-XXjjoY1OowGG_ 本来想写一个,查了一下,在知道中就有

龙口市15911033106: 汇编语言求绝对值 Y={X,(X>0); - X,(X<0)} -
巢苑罗汉: dseg segmentdw ydw x dseg ends cseg segmentassume cs:cseg,ds,dseg start: mov ax,dsegmov ds,ax mov ax,[x] ;取X的值cmp ax,8000h ;如果小于8000H.表明是正数jc LB0neg ax ;求补,将负数变成正数 LB0: mov [y],ax ;mov ax,4c00h ;程序结束int 21h cseg endsend start

龙口市15911033106: - 1(x<0) 1、有一个函数y= 0(x=0) 编一程序,输入一个x的值,输出y的值,. 1(x>0) -
巢苑罗汉: #include<stdio.h> void main() { int x=0,y=0; scanf("%d",&x); if(x>0) y=1; else if(x==0) y=0; else if(x<0) y=-1; printf("y=%d\n",y); }

龙口市15911033106: 如何编写计算y=x*x 6x 9的程序(汇编语言) -
巢苑罗汉: 如下 mov al,x ;x放入AL lea cx,[al*6] ;6x放入CL mov bl,x mul bl ;al*bl就是x*x结果 add ax,cx ;AX+CX就是x*x+6x结果入AX add ax,9 ;ax+9就是x*x+6x+9结果入AX

龙口市15911033106: 单片机作业:汇编程序 y=x*x,0<=x<256 -
巢苑罗汉: mov a,x clr c subb a,#0 jnc gogo jmp exit gogo:clr c subb a,#ff jnc gogo2 jmp exit gogo2:mov b,a mul ab mov y,a

龙口市15911033106: 用汇编写出Y=x^2+6*x+9, -
巢苑罗汉: #include<iostream.h> int mycall(int x) { _asm { mov eax,x imul eax,x imul eax,3 mov ebx,x imul ebx,2 add eax,ebx add eax,6 mov x,eax } return x; } int main() { int a; cin>>a; cout<<mycall(a)<<endl; } 希望能帮到你!

龙口市15911033106: C语言编写程序:Y=X(X<1),Y=2X - 1(1=<X<10),Y=3X - 11(X>=10)输入一个X值,输出Y值 -
巢苑罗汉: #include void main() {int x,y; scanf("%d",&x); if(xif(x=1) y=2*x-1; if(x>=10) y=3*x-11; printf("y=%d\n",y); }

龙口市15911033106: 汇编语言(键盘接收十进制数X以十六进制显示Y按以下公式计算Y=X^2+X(X=3);X^2 - 2X(X=4);X^2(X=5);X^2/2(X=6) -
巢苑罗汉:[答案] ;用汇编实现多位十六进制数相加 DATA SEGMENT ;高位在前,个位最后 x db 0,45h,21h,0ADh,0CBh,54h,59h,44h,55H ;4521ADCB54594455H y db 0,45h,21h,0BAh,0DCh,78h,59h,44h,55H ;4521BADC78594455H z db 9 dup (0);累...

龙口市15911033106: Y=x (X<1);Y=2X - 1(1<=x<10);Y=2x - 11(x>=10)用C语言编辑! -
巢苑罗汉: #include <stdio.h> void main() { int Y; int x; printf("请输入x的值 "); scanf("%d",&x); if(x<1) { Y=x;} if(x>=1&&x<10) { Y=2*x-1; } if(x>=10) { Y=2*x-11; } printf("计算后Y的值是%d \n ",Y); }

龙口市15911033106: 用汇编语言编写程序y=10当>0时,y=0当x=0时,y=—10当x<0 -
巢苑罗汉: dseg segment x db 4 y db ? dseg ends cseg segmentassume cs:cseg,ds:dseg begin: mov ax,dsegmov ds,ax mov al,x ;取出x的值放aland al,al ;判断x是什么数jz zero ;为零,转zerojns plus ;为正,转plusmov bl,-10 ;为负数,顺序执行...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网