按键脚本循环问题想让他运行N次,有N种方法。 其中最简单的 For 1 (这是循环次数) (这行以后放入打怪程序) EndFor (这以后是修装备的命令) 一共四行,把脚本弄成循环的就OK了 我建议
输入字符串,不知道字符个数所以定义了DB ?,但后来直接把?mov到cl里循环,为什么可以这样呢
汇编语言编程
;编写多字节有符号数的加法程序,从键盘接收两个加数,在屏幕上显示结果。
;16位有符号数加减运算
assume cs:codesg,ds:datasg,ss:stacksg
datasgsegment
input1 db 'Inputfirstnumber!','$'
input2 db 'Inputsecondnumber!','$'
result db 'Sumis:','$'
;21号中断10号例程,存放输入数据
add1 db 6 ;缓冲区最大容量
db ? ;实际上接收字符的个数,不包括最后的回车
db 6dup(?) ;存放输入的字符,回车结尾
add2 db 6
db ?
db 6dup(?)
num dw ? ;存放中间结果
sign db ? ;两个数和的符号位
sum dw 10dup(?) ;两个数的和
datasgends
stacksgsegment
stacksgends
codesgsegment
start: mov ax,datasg
mov ds,ax
lea dx,input1
mov ah,9
int 21h
;读取第一个加数
mov dx,offsetadd1
mov ah,10
int 21h
;取光标位置,ah为行,al为列
mov ah,3
mov bh,0
int 10h
;设置光标位置
mov ah,2
mov bh,0
inc dh
mov dl,0
int 10h
lea dx,input2
mov ah,9
int 21h
;读取第二个加数
mov dx,offsetadd2
mov ah,10
int 21h
;取光标位置,ah为行,al为列
mov ah,3
mov bh,0
int 10h
;设置光标位置
mov ah,2
mov bh,0
inc dh
mov dl,0
int 10h
lea dx,result
mov ah,9
int 21h
;转换第一个数字,并设置字符串个数
mov bx,offsetadd1
mov cl,[bx+2]
push cx ;保存符号位
xor dx,dx
;确定第一位是数字不是符号位
cmp cl,30h
jb pos1
cmp cl,39h
ja pos1
mov dl,[bx+1] ;然后确定数字长度
add bx,2
mov ax,bx ;确定字符串首地址
jmp convert1
pos1:
mov dl,[bx+1]
dec dl ;确定数字长度
add bx,3
mov ax,bx ;确定字符串首地址
convert1:
push dx
push ax
call DeciToBina
pop cx ;取出符号位
cmp cl,2dh
jnz sign1 ;不为负号则不变
neg ax
sign1:
lea bx,num
mov [bx],ax ;保存第一个数
;转换第二个数字
mov bx,offsetadd2
xor dx,dx
mov cl,[bx+2] ;测试符号位
push cx
cmp cl,30h
jb posi2
cmp cl,39h
ja posi2
mov dl,[bx+1] ;保存数字字符串长度
add bx,2
mov ax,bx ;保存数字字符串首地址
jmp convert2
posi2:
mov dl,[bx+1]
dec dl ;保存数字字符串的长度
add bx,3
mov ax,bx ;保存数字字符串首地址
convert2:
push dx
push ax
call DeciToBina
pop cx
cmp cl,2dh
jnz sign2
neg ax
sign2:
lea bx,num
add ax,[bx]
;设置结果的符号
push ax
and ax,1000000000000000b
neg ax
sbb ax,ax
neg ax
lea bx,sign
cmp ax,1
jnz sign3
mov byteptr[bx],'-'
pop ax
neg ax ;如为负数,则求出结果的绝对值
jmp output
sign3:
mov byteptr[bx],'+'
pop ax
;转为ascii码输出
output:
push ax
lea bx,sum
push bx
call BinaToDeci
lea dx,sign
mov ah,9
int 21h
;取光标位置,ah为行,al为列
mov ah,3
mov bh,0
int 10h
;设置光标位置
mov ah,2
mov bh,0
inc dh
mov dl,0
int 10h
mov ax,4c00h
int 21h
;***********************************************************************
;作用:将十六进制数,转为十进制字符,用以输出
;形式:voidBinaToDeci([buff],int),从右向左依次压入堆栈
;参数1:第一个参数[buff]:接收结果的缓冲区地址
;参数2:第二个参数int:待转换的十六进制数字
;返回值:无,直接保存到内存中
;***********************************************************************
BinaToDeci proc
push bp
mov bp,sp
push ax
push bx
push cx
push dx
mov cx,0 ;初始化计数器,记录循环次数,即十进制数的位数
mov ax,[bp+6] ;取出传入的待转换十六进制数,段内调用只加6,段间调用加8
;计算出十进制各位数字,并保存到堆栈
bina_next:
xor dx,dx
mov bx,10
div bx
push dx
inc cx
cmp ax,0
jz bina_end
jmp bina_next
bina_end:
mov bx,[bp+4] ;取出保存十进制数的缓冲区首地址
;将十进制的各个位数转换成ascii码,并存入指定的内存区域
bina_next2:
pop ax
add ax,30h
mov byteptr[bx],al
inc bx
loop bina_next2
;字符串以'$'结尾,用以调用21号中段的9号例程
mov byteptr[bx],'$'
pop dx
pop cx
pop bx
pop ax
mov sp,bp
pop bp
ret 4
BinaToDeci endp
;***********************************************************************
;***********************************************************************
;作用:将十进制字符,转换为十六进制数,用以计算
;形式:voidDeciToBina([buff],int),从右向左依次压入堆栈
;参数1:第一个参数[buff]:放置十进制数字字符串的缓冲区的首地址
;参数2:第二个参数int:十进制字符串的字符个数
;返回值:十六进制的数字
;***********************************************************************
DeciToBina proc
push bp
mov bp,sp
push bx
push cx
push dx
push si
mov bx,[bp+4] ;取放置十进制字符串缓冲区的首地址
mov cx,[bp+6] ;十进制数字字符串的字符个数
xor ax,ax
;将ascii码还原为数字,并保存到堆栈
deci_next:
mov al,byteptr[bx] ;依次取缓冲区内的字符
sub al,30h
push ax
inc bx
loop deci_next
mov cx,[bp+6] ;再次获得字符的个数
xor ax,ax
xor dx,dx
mov bx,1 ;用作乘数
xor si,si
;各位相乘然后累加获得十六进制数值
;结果=个位*1+十位*10+百位*100+千位*1000
deci_next1:
pop ax ;取出数字
mul bx ;相乘
add si,ax ;累加结果
;计算下次相乘时的乘数
mov ax,bx
mov bx,10
mul bx
mov bx,ax
loop deci_next1
;将结果存入ax,为返回值
mov ax,si
pop si
pop dx
pop cx
pop bx
mov sp,bp
pop bp
ret 4
DeciToBina endp
;***********************************************************************
codesgends
endstart
汇编语言程序设计题
; 本程序通过编译,运行正确 Data Segment org 200h Data_BCD db 58h ;两位BCD码 db ?,? ;保存转换后的ASCII码 Data Ends Code Segment Assume CS:Code,DS:Data Start: mov ax,Data mov ds,ax ;数据段段地址 mov al,Data_BCD ;取两位BCD码 xor ah,ah ;累加器高位字节清零 mov cx,4 ;逻辑左移、右移次数 shl ax,cl ;ax左移4位,把两位BCD码的高4位移到累加器高字节 shr al,cl ;把两位BCD码的低4位移回原位置,实现两汇编语言中字符串的使用
mov dl,[len1] mov ah,02h int 21h ---- 呵呵,输出,不是这样简单的。 len1,是二进制数字,必须把它变成十进制的个位、十位.., 再把各位数,都变换成ASCII码,放到DL中,最后才能输出到显示屏。汇编程序题目
1、 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ..... ;确定数据段段地址 mov ax,data mov ds,ax ..... ;(1) mov ax,x sub ax,05h mov y,ax ;(2) mov ax,x add ax,0ah mov y,ax 2、有注释的 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- data segment BUFF db 127 ;开始建立输入缓冲 db ? db 127 dup(?) NUMBER db 127 du汇编语言编程
dseg segment buff db 12,?,12 dup(?) dseg ends cseg segment assume ds:dseg,cs:cseg begin: mov ax,dseg mov ds,ax lea dx,buff mov ah,10 int 21h ;以上是输入字符串(最多11个字符,要是想输入更多,可以把buff变大,把12换成一个更大的数) mov dl,0ah mov ah,2 int 21h mov dl,0dh int 21h ;以上是换行 mov ah,1 int 21h ;读入要查找的字符个数 mov cl,buff+1 xor ch,ch lea相关文章
- 详细阅读
-
选择合适的编程原点,运用G00和G01指详细阅读
数控加工有哪些加工指令简述G00,G01,G02,G03功能和用途?加工中心特征的一些指令:1、准确停止校验指令G09指令格式:G09;刀具到达终点前减速并精确定位后才继续执行下一个程序段,可
-
延安市政府配置的宝德计算机怎么样详细阅读
宝德存储默认密码1、宝德4卡服务器 默认用户名:ADMIN/密码:11111111 2、超微服务器 默认用户名:ADMIN/密码:admin000 默认用户名:ADMIN/密码:ADMIN 3、浪潮服务器 型号:NF5270M4
-
东方博宜OJ的1031题c++怎么编程?详细阅读
c语言编程 同一天生日:在一个有200人的大班级中,存在两个人生日相同的概率非常大。。创建数组:char[11][200],存储学号; int m[200],d[200],存储生日的月日; int n,记录学生的个数; i
-
编程用的中括号什么意思详细阅读
c语言中中括号什么意思?[ ]该中括号为数组标识。int a[6];就是定义一个一维数组,这个数组名叫做 a ,共有6个元素;同理int b[6][6];就是定义一个二维数组,这个数组共有6*6个元素。
- 详细阅读
-
计算机设备和打印机中的打印机不显详细阅读
打开打印机为什么在电脑桌面上看不见打印机的图标?不正常情况下打印机图标都不应该再桌面上。默认设置没这样。放桌面,XP:开始→控制面板→打印机和传真→找你要的打印机右键有
-
MATLAB非线性优化求最小值时,有一个详细阅读
MATLAB作非线性优化求最小值时,有一个含有优化变量的积分如何处理对于含有优化变量的积分问题,我的建议如能直接积分得到结果,可以直接在表达式上改变量,这样可以少浪费时间把问
-
win10系统,退出clash之前直接重启计详细阅读
Win10系统自带浏览器无法打开网页怎么办如果你是指电脑无法打开或浏览网页,你可根据以下情况进行排障: 1、宽带未连接。重新连接宽带。 2、路由器故障。拆除路由器后,进行宽带
-
mastercam9.1 编程的时候卡是什么详细阅读
是不是用win10的系统用mastercam9.1特别卡啊解决Mastercam9.1在Win7系统编程与显示刀路卡顿 Mastercam9.1作为一款非常经典方便快捷的编程软件,相信现在还是有大把编程师傅