汇编问题急啊,高手帮帮忙吧
来源:百度知道 编辑:UC知道 时间:2024/04/30 02:01:41
DATA SEGMENT
W DW -304
X DW 1000
Y DW -12
Z DW 20
RESULT DW 2 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,X ;被乘数X取到AX中
IMUL Y ;计算X*Y
MOV CX,AX
MOV BX,DX ;X*Y转存到BX、CX
MOV AX,Z ;Z取到AX中
CWD ;Z扩展到DX、AX中
ADD CX,AX
ADC BX,DX ;计算X*Y+Z
SUB BX,220 ;计算X*Y+Z-220
SBB BX,0
MOV AX,W ;W取到AX中
CWD ;扩展到DX、AX中
SUB AX,CX
SBB DX,BX ;计算W-(X*Y+Z-220)
IDIV X ;计算(W-(X*Y+Z-220))/X
MOV RESULT,AX
MOV RESULT+2,DX ;送结果
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START
这是我编的已经给了初值的程序段,可是我们老师要求是用键盘输入这四个数然后在屏幕上显示,这比上面要复杂的多,关键是键盘输入要怎么转化为计算用到的值,然后重新转化为数的ASCII码输出呢?
键盘输入四个带符号数,完成(w-(x*y+z-220))/x的计算,将表达式的商和余数存入数据区 result单元开始的区
W DW -304
X DW 1000
Y DW -12
Z DW 20
RESULT DW 2 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,X ;被乘数X取到AX中
IMUL Y ;计算X*Y
MOV CX,AX
MOV BX,DX ;X*Y转存到BX、CX
MOV AX,Z ;Z取到AX中
CWD ;Z扩展到DX、AX中
ADD CX,AX
ADC BX,DX ;计算X*Y+Z
SUB BX,220 ;计算X*Y+Z-220
SBB BX,0
MOV AX,W ;W取到AX中
CWD ;扩展到DX、AX中
SUB AX,CX
SBB DX,BX ;计算W-(X*Y+Z-220)
IDIV X ;计算(W-(X*Y+Z-220))/X
MOV RESULT,AX
MOV RESULT+2,DX ;送结果
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START
这是我编的已经给了初值的程序段,可是我们老师要求是用键盘输入这四个数然后在屏幕上显示,这比上面要复杂的多,关键是键盘输入要怎么转化为计算用到的值,然后重新转化为数的ASCII码输出呢?
键盘输入四个带符号数,完成(w-(x*y+z-220))/x的计算,将表达式的商和余数存入数据区 result单元开始的区
这是我以前编的一个从键盘输入整数的程序,希望对你有点帮助
data segment
intnum dw 0
data ends
stack segment
db 50h dup(11)
stack ends
code segment
assume cs:code, ds:data, ss:stack
main proc far
start: mov ax, data
mov ds, ax
mov es, ax
mov ax, stack
mov ss, ax
mov sp, 4fh
lea si, intnum
mov cx, 6
xor bx, bx
mov [intnum], word ptr 10
.loop: mov ah, 01h
int 21h
cmp cx, 6
jnz next1
cmp al, 2dh
jnz next0
mov dx, 1
push dx
dec cx
jmp .loop
next0: xor dx, dx
push dx
next1: cmp al, 30h
jl tail
cmp al, 39h
jg tail
xchg bx, ax
xor dx, dx
cwd
imul word ptr [intnum]
xchg bx, ax
sub al, 30h
xor ah, ah
add bx, ax
jmp .loop
tail: pop ax
cmp ax, 0
jz tail1
neg bx
tail1: mov [intnum],